久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Redis中數(shù)據(jù)結(jié)構(gòu)與數(shù)據(jù)操作的示例分析

149次閱讀
沒有評論

共計 1147 個字符,預(yù)計需要花費 3 分鐘才能閱讀完成。

自動寫代碼機器人,免費開通

丸趣 TV 小編給大家分享一下 Redis 中數(shù)據(jù)結(jié)構(gòu)與數(shù)據(jù)操作的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

Redis 完成數(shù)據(jù)操作的速度能達到微秒級別,Redis 能有這么突出的表現(xiàn),主要原因有兩個:

Redis 是內(nèi)存數(shù)據(jù)庫,所有操作都在內(nèi)存上完成,內(nèi)存的訪問速度本身就很快;

Redis 擁有高效的數(shù)據(jù)類型和數(shù)據(jù)結(jié)構(gòu)。Redis 中數(shù)據(jù)結(jié)構(gòu)與數(shù)據(jù)操作的示例分析

為了實現(xiàn) key 到 value 的快速訪問,Redis 使用哈希表來存儲鍵值對,哈希桶中 entry 保存了指向?qū)嶋H key 和 value 的指針,即使值是一個集合,也可以通過 value 指針查找到。Redis 中數(shù)據(jù)結(jié)構(gòu)與數(shù)據(jù)操作的示例分析

當(dāng)哈希表中數(shù)據(jù)越來越多后,會出現(xiàn)哈希沖突,也就是多個 key 的哈希值可能對應(yīng)到同一個哈希桶中。Redis 使用鏈?zhǔn)焦斫鉀Q哈希沖突,就是將同一個哈希桶中的多個元素用一個鏈表來保存,元素之間依次用指針鏈接。Redis 中數(shù)據(jù)結(jié)構(gòu)與數(shù)據(jù)操作的示例分析

如果哈希沖突越來越多,會導(dǎo)致哈希沖突鏈過長,進而導(dǎo)致查找元素耗時長、效率低。為了解決這個問題,Redis 會對哈希表進行 rehash 操作,將多個 entry 元素分散保存,減少單個哈希桶中的元素個數(shù),從而減少單個桶中的沖突。

Redis 默認(rèn)使用兩個全局哈希表來進行高效 rehash,一開始默認(rèn)使用哈希表 1,哈希表 2 不分配空間,當(dāng)數(shù)據(jù)不斷增多時,redis 通過如下步驟進行 rehash:

給哈希表 2 分配更大的空間

把哈希表 1 中的數(shù)據(jù)拷貝到哈希表 2 中

釋放哈希表 1 的空間,留作下一次 rehash 擴容備用

但是第 2 步如果一次性將大量數(shù)據(jù)進行拷貝,可能會造成 Redis 線程阻塞,無法服務(wù)其他請求,所以 Redis 采用了漸進式 rehash,就是每處理一個請求,順帶將這個索引位置上的所有 entry 進行拷貝。Redis 中數(shù)據(jù)結(jié)構(gòu)與數(shù)據(jù)操作的示例分析

對于 String 類型的 value 來說,找到哈希桶就可以直接進行 CRUD 操作了,而對于集合來說,通過全局哈希表找到對應(yīng)的哈希桶后,在集合中再進行 CRUD。集合的操作效率與底層數(shù)據(jù)結(jié)構(gòu)和操作復(fù)雜度有關(guān)。

Redis 中數(shù)據(jù)結(jié)構(gòu)與數(shù)據(jù)操作的示例分析

單元素操作是基礎(chǔ),操作復(fù)雜度為 O(1);

Hash:HGET、HSET、HDEL;

Set 類型的 SADD、SREM、SRANDMEMBER 等。

范圍操作非常耗時,操作復(fù)雜度為 O(N)。

Hash:HGETALL;

Set:SMEMBERS;

List:LRANGE

ZSet:ZRANGE

統(tǒng)計操作通常高效,操作復(fù)雜度為 O(1)。

例外情況只有幾個,操作復(fù)雜度為 O(1)。

List:LPOP、RPOP、LPUSH、RPUSH

以上是“Redis 中數(shù)據(jù)結(jié)構(gòu)與數(shù)據(jù)操作的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注丸趣 TV 行業(yè)資訊頻道!

向 AI 問一下細(xì)節(jié)

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-12-04發(fā)表,共計1147字。
轉(zhuǎn)載說明:除特殊說明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 大新县| 莱州市| 宜城市| 宁乡县| 霞浦县| 汤阴县| 恩施市| 阜宁县| 万安县| 东乡族自治县| 玉林市| 罗江县| 汽车| 花垣县| 鄂温| 葫芦岛市| 中西区| 壶关县| 樟树市| 舞阳县| 安西县| 寿阳县| 镶黄旗| 南昌县| 谷城县| 邳州市| 绥滨县| 苏尼特右旗| 浏阳市| 和龙市| 农安县| 曲松县| 贡嘎县| 安吉县| 丰原市| 简阳市| 和林格尔县| 延川县| 泌阳县| 景东| 阜南县|