最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Redis數(shù)據(jù)結(jié)構(gòu)面試高頻問題解析

 更新時間:2023年06月12日 09:11:51   作者:小萬哥  
這篇文章主要為大家介紹了Redis數(shù)據(jù)結(jié)構(gòu)高頻面試問題解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

概述

Redis 是速度非??斓姆顷P(guān)系型(NoSQL)內(nèi)存鍵值數(shù)據(jù)庫,可以存儲鍵和五種不同類型的值之間的映射。

鍵的類型只能為字符串,值支持五種數(shù)據(jù)類型:字符串、列表、集合、散列表、有序集合。

Redis 支持很多特性,例如將內(nèi)存中的數(shù)據(jù)持久化到硬盤中,使用復(fù)制來擴(kuò)展讀性能,使用分片來擴(kuò)展寫性能。

數(shù)據(jù)類型

數(shù)據(jù)類型可以存儲的值操作
STRING字符串、整數(shù)或者浮點數(shù)對整個字符串或者字符串的其中一部分執(zhí)行操作,對整數(shù)和浮點數(shù)執(zhí)行自增或者自減操作
LIST列表從兩端壓入或者彈出元素,對單個或者多個元素進(jìn)行修剪,只保留一個范圍內(nèi)的元素
SET無序集合添加、獲取、移除單個元素,檢查一個元素是否存在于集合中,計算交集、并集、差集,從集合里面隨機(jī)獲取元素
HASH包含鍵值對的無序散列表添加、獲取、移除單個鍵值對,獲取所有鍵值對,檢查某個鍵是否存在
ZSET有序集合添加、獲取、刪除元素,根據(jù)分值范圍或者成員來獲取元素,計算一個鍵的排名

STRING

Redis 的 String 類型使用 SDS(簡單動態(tài)字符串)作為底層的數(shù)據(jù)結(jié)構(gòu)實現(xiàn)。SDS 與 C 字符串有所不同,它不僅可以保存文本數(shù)據(jù),還可以保存二進(jìn)制數(shù)據(jù)。這是因為 SDS 使用 len 屬性的值而不是空字符來判斷字符串是否結(jié)束,并且 SDS 的所有 API 都會以處理二進(jìn)制的方式來處理 SDS 存放在 buf[] 數(shù)組里的數(shù)據(jù)。因此,SDS 不僅能存放文本數(shù)據(jù),還能保存圖片、音頻、視頻、壓縮文件等二進(jìn)制數(shù)據(jù)。

另外,Redis 的 SDS API 是安全的,拼接字符串不會造成緩沖區(qū)溢出。這是因為 SDS 在拼接字符串之前會檢查 SDS 空間是否滿足要求,如果空間不夠會自動擴(kuò)容,從而避免了緩沖區(qū)溢出的問題。

此外,獲取字符串長度的時間復(fù)雜度是 O(1),因為 SDS 結(jié)構(gòu)里用 len 屬性記錄了字符串長度,所以獲取長度的復(fù)雜度為 O(1)。相比之下,C 語言的字符串并不記錄自身長度,所以獲取長度的復(fù)雜度為 O(n)。這些特性使得 SDS 成為 Redis 的一個重要組成部分。

> set hello world
OK
> get hello
"world"
> del hello
(integer) 1
> get hello
(nil)

LIST

Redis 的 List 類型底層數(shù)據(jù)結(jié)構(gòu)可以由雙向鏈表或壓縮列表實現(xiàn)。如果列表元素個數(shù)小于 512 個且每個元素的值都小于 64 字節(jié),則 Redis 會使用壓縮列表作為底層數(shù)據(jù)結(jié)構(gòu);否則,Redis 會使用雙向鏈表作為底層數(shù)據(jù)結(jié)構(gòu)。然而,在 Redis 3.2 版本之后,List 類型底層數(shù)據(jù)結(jié)構(gòu)只由 quicklist 實現(xiàn),代替了雙向鏈表和壓縮列表。

> rpush list-key item
(integer) 1
> rpush list-key item2
(integer) 2
> rpush list-key item
(integer) 3
> lrange list-key 0 -1
1) "item"
2) "item2"
3) "item"
> lindex list-key 1
"item2"
> lpop list-key
"item"
> lrange list-key 0 -1
1) "item2"
2) "item"

SET

Set 類型的底層數(shù)據(jù)結(jié)構(gòu)可以是哈希表或整數(shù)集合。當(dāng)集合中的元素都是整數(shù)并且元素個數(shù)小于512時,Redis使用整數(shù)集合作為Set類型的底層數(shù)據(jù)結(jié)構(gòu);否則,Redis使用哈希表作為Set類型的底層數(shù)據(jù)結(jié)構(gòu)。

> sadd set-key item
(integer) 1
> sadd set-key item2
(integer) 1
> sadd set-key item3
(integer) 1
> sadd set-key item
(integer) 0
> smembers set-key
1) "item"
2) "item2"
3) "item3"
> sismember set-key item4
(integer) 0
> sismember set-key item
(integer) 1
> srem set-key item2
(integer) 1
> srem set-key item2
(integer) 0
> smembers set-key
1) "item"
2) "item3"

HASH

Redis 中的 Hash 類型的底層數(shù)據(jù)結(jié)構(gòu)可以是壓縮列表或哈希表。如果元素個數(shù)小于 512 個且每個元素的值都小于 64 字節(jié),Redis 會使用壓縮列表作為底層數(shù)據(jù)結(jié)構(gòu);否則會使用哈希表。在 Redis 7.0 中,壓縮列表已經(jīng)廢棄,改用 listpack 數(shù)據(jù)結(jié)構(gòu)來實現(xiàn)。

> hset hash-key sub-key1 value1
(integer) 1
> hset hash-key sub-key2 value2
(integer) 1
> hset hash-key sub-key1 value1
(integer) 0
> hgetall hash-key
1) "sub-key1"
2) "value1"
3) "sub-key2"
4) "value2"
> hdel hash-key sub-key2
(integer) 1
> hdel hash-key sub-key2
(integer) 0
> hget hash-key sub-key1
"value1"
> hgetall hash-key
1) "sub-key1"
2) "value1"

ZSET

Zset 類型的底層數(shù)據(jù)結(jié)構(gòu)可以是壓縮列表或跳表。

如果有序集合的元素個數(shù)小于 128 個,且每個元素的值小于 64 字節(jié),則 Redis 會使用壓縮列表作為 Zset 類型的底層數(shù)據(jù)結(jié)構(gòu)。

如果有序集合的元素個數(shù)大于等于 128 個或者每個元素的值大于等于 64 字節(jié),則 Redis 會使用跳表作為 Zset 類型的底層數(shù)據(jù)結(jié)構(gòu)。

需要注意的是,Redis 7.0 中廢棄了壓縮列表數(shù)據(jù)結(jié)構(gòu),改用 listpack 數(shù)據(jù)結(jié)構(gòu)來實現(xiàn)。

> zadd zset-key 728 member1
(integer) 1
> zadd zset-key 982 member0
(integer) 1
> zadd zset-key 982 member0
(integer) 0
> zrange zset-key 0 -1 withscores
1) "member1"
2) "728"
3) "member0"
4) "982"
> zrangebyscore zset-key 0 800 withscores
1) "member1"
2) "728"
> zrem zset-key member1
(integer) 1
> zrem zset-key member1
(integer) 0
> zrange zset-key 0 -1 withscores
1) "member0"
2) "982"

以上就是Redis數(shù)據(jù)結(jié)構(gòu)高頻面試問題解析的詳細(xì)內(nèi)容,更多關(guān)于Redis數(shù)據(jù)結(jié)構(gòu)高頻面試的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • react之umi配置國際化語言locale的踩坑記錄

    react之umi配置國際化語言locale的踩坑記錄

    這篇文章主要介紹了react之umi配置國際化語言locale的踩坑記錄,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • React模擬實現(xiàn)Vue的keepAlive功能

    React模擬實現(xiàn)Vue的keepAlive功能

    Vue中,keep-alive組件可以緩存組件狀態(tài),在路由切換時重新掛載,實現(xiàn)這一功能在React中并不簡單,但我們可以借助一個第三方庫——react-activation 來模擬Vue的keep-alive功能,需要的朋友可以參考下
    2024-10-10
  • 手挽手帶你學(xué)React之React-router4.x的使用

    手挽手帶你學(xué)React之React-router4.x的使用

    這篇文章主要介紹了手挽手帶你學(xué)React之React-router4.x的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-02-02
  • React實現(xiàn)動效彈窗組件

    React實現(xiàn)動效彈窗組件

    最近在使用react開發(fā)項目,遇到這樣一個需求實現(xiàn)一個帶有動效的 React 彈窗組件,如果不考慮動效,很容易實現(xiàn),接下來小編通過本文給大家介紹React實現(xiàn)動效彈窗組件的實現(xiàn)代碼,一起看看吧
    2021-06-06
  • react使用axios進(jìn)行api網(wǎng)絡(luò)請求的封裝方法詳解

    react使用axios進(jìn)行api網(wǎng)絡(luò)請求的封裝方法詳解

    這篇文章主要為大家詳細(xì)介紹了react使用axios進(jìn)行api網(wǎng)絡(luò)請求的封裝方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • useEffect中不能使用async原理詳解

    useEffect中不能使用async原理詳解

    這篇文章主要為大家介紹了useEffect中為什么不能使用async的原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • React實現(xiàn)反向代理和修改打包后的目錄

    React實現(xiàn)反向代理和修改打包后的目錄

    這篇文章主要介紹了React實現(xiàn)反向代理和修改打包后的目錄方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • React?Fiber構(gòu)建源碼解析

    React?Fiber構(gòu)建源碼解析

    這篇文章主要為大家介紹了React?Fiber構(gòu)建源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • React Hooks 鉤子的具體使用

    React Hooks 鉤子的具體使用

    React Hooks是React 16.8引入的重要特性,讓函數(shù)組件能夠擁有類組件的狀態(tài)和生命周期能力,下面就來介紹一下React Hooks的具體使用,m感興趣的可以了解一下
    2025-09-09
  • React狀態(tài)管理器Rematch的使用詳解

    React狀態(tài)管理器Rematch的使用詳解

    rematch是對redux的二次封裝,簡化了redux是使用,極大的提高了開發(fā)體驗,這篇文章主要介紹了React狀態(tài)管理器Rematch的使用,需要的朋友可以參考下
    2022-09-09

最新評論

阜新市| 财经| 响水县| 萝北县| 彭泽县| 元氏县| 富蕴县| 黔西县| 洱源县| 都匀市| 青神县| 濉溪县| 常山县| 乐山市| 柘城县| 巍山| 镇江市| 衡阳市| 新民市| 泽普县| 莆田市| 揭东县| 合作市| 汝州市| 开封县| 通道| 湖南省| 合肥市| 乌拉特前旗| 阿勒泰市| 红原县| 台中县| 沂源县| 图木舒克市| 横山县| 景德镇市| 江口县| 军事| 体育| 涿鹿县| 永新县|