您好,登錄后才能下訂單哦!
這篇文章給大家介紹redis中zset的作用是什么,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
1. zset是什么?
在redis官網(wǎng)(https://redis.io/)上,我們可以看到 set, sorted set。其實(shí)zset就是sorted set。為了避免sorted set簡寫sset導(dǎo)致命令沖突,所以改為zset。同理例如class-->clazz
sorted set從字面意思上,很容易就可以理解,是個有序且不可重復(fù)的數(shù)據(jù)集合。類似set和hash的混合體,但是相比于set,zset內(nèi)部由score進(jìn)行排序.
2. zset中的score排序規(guī)則
升序排列,分值越大越靠后
分值相同,則按照value的字典順序排序
3. zset的用法
zset的命令可在這里(http://www.redis.cn/commands.html#sorted_set)看到,有興趣的同學(xué)可以直接去看。
ZADD key score1 value1 score2 value2........
即表示增加是的score和value 組,可同時增加多個
4. zset實(shí)現(xiàn)
在redis.conf中,有如下兩個參數(shù):
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
這兩個條件均不滿足,使用 ziplist壓縮表來實(shí)現(xiàn)sorted set
滿足這兩個條件之一,sorted set的內(nèi)部實(shí)現(xiàn)會由ziplist轉(zhuǎn)換為zset
zset-max-ziplist-entries 128,即sorted set中的元素對超過128時(存儲的是score和value的元素對,所以數(shù)據(jù)項是256),內(nèi)部實(shí)現(xiàn)會由ziplist轉(zhuǎn)換為zset。
zset-max-ziplist-value 64,即任意一個value的長度超過了64字節(jié),內(nèi)部實(shí)現(xiàn)會由ziplist轉(zhuǎn)換為zset.
zset由 dict、skiplist實(shí)現(xiàn)。
5. ziplist,即壓縮列表
壓縮列表是由連續(xù)性內(nèi)存組成的順序性數(shù)據(jù)結(jié)構(gòu),一個壓縮列表可以包含任意多的entry,每個entry可以保存一個字節(jié)數(shù)組或者一個整數(shù)。
壓縮列表在表頭有三個字段:zlbytes,zltail,zllen分別表示列表長度(整個列表占用的字節(jié)數(shù)),列表尾的偏移量(尾節(jié)點(diǎn)距離起始地址的字節(jié)數(shù))和列表中entry的個數(shù)。
列表表尾還有一個zlend,表示列表結(jié)束了。
6. skiplist
由上圖壓縮列表可知,如果我們查找第一個元素或者最后一個元素,直接通過表頭三個字段的長度可定位。復(fù)雜度是O(1),而如果查找其他元素,只能順序查找,復(fù)雜度是O(n)。 為了解決這個問題,可以使用跳表。
跳表是在鏈表的基礎(chǔ)上,增加了多級索引。如下圖(圖片來源:極客時間),為了提高查詢速度,增加了一級索引。為了再次提高查詢速度,還可以繼續(xù)增加二級索引。查找過程就是在多級索引上跳躍,最終定位到元素。
在新增節(jié)點(diǎn)之前,也會先經(jīng)過查詢,確定插入位置,再完成插入操作,同時也實(shí)現(xiàn)了 Sorted Set 的排序。
跳表中新增加節(jié)點(diǎn)不會影響其他節(jié)點(diǎn)的索引位置。因此插入操作只需要修改插入節(jié)點(diǎn)前后的指針,不需要修改所有節(jié)點(diǎn),降低了插入的復(fù)雜度,所以跳表在插入性能上明顯優(yōu)于平衡樹。
7. zset的使用場景
需要排序的場景,比如top10的熱點(diǎn)文章,或者排行榜
消息的延遲發(fā)送,用score存儲發(fā)送時間戳,定時任務(wù)掃描sorted set,判斷時間進(jìn)行發(fā)送。
關(guān)于redis中zset的作用是什么就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。