欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Redis排序命令Sort深入解析

 更新時(shí)間:2022年12月11日 09:13:37   作者:菜菜的后端私房菜  
這篇文章主要為大家介紹了Redis排序命令Sort深入解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

引言

Redis是一款快速、優(yōu)秀的鍵值對(duì)數(shù)據(jù)庫(kù),提供豐富的數(shù)據(jù)結(jié)構(gòu)能在各種場(chǎng)景下實(shí)現(xiàn)功能,同時(shí)也提供豐富的命令來完成各種各樣的功能,本篇文章將深入淺出的解析Sort命令的原理以及使用

原理

Sort 命令用來對(duì)list、set、zset對(duì)象進(jìn)行排序,返回排序后的結(jié)果

Sort命令會(huì)使用一個(gè)與原來對(duì)象等長(zhǎng)的數(shù)組,數(shù)組中的節(jié)點(diǎn)RedisSortObject存儲(chǔ)了元素(指向?qū)?yīng)元素)以及權(quán)值,排序就是根據(jù)權(quán)值來排序,權(quán)值默認(rèn)情況下是浮點(diǎn)型,如果要排序的是字符串則權(quán)值為字符串對(duì)象

等長(zhǎng)數(shù)組中的RedisSortObject節(jié)點(diǎn)會(huì)與排序?qū)ο笾械脑匾灰粚?duì)應(yīng)記錄元素對(duì)象的地址和權(quán)值

再使用快速排序根據(jù)等長(zhǎng)數(shù)組中RedisSortObject對(duì)象中的權(quán)值進(jìn)行排序(默認(rèn)升序)

注意:排序只在新數(shù)組中操作,并沒有改變?cè)瓉淼膶?duì)象

圖中排序流程對(duì)應(yīng)以下命令操作

 127.0.0.1:6379> lpush number 1 3 5
 (integer) 3
 127.0.0.1:6379> lrange number 0 -1
 1) "5"
 2) "3"
 3) "1"
 127.0.0.1:6379> sort number
 1) "1"
 2) "3"
 3) "5"

alpha 選項(xiàng)

alpha選項(xiàng)對(duì)字符串進(jìn)行排序,如果對(duì)字符串進(jìn)行排序不使用alpha會(huì)報(bào)出字符串無法轉(zhuǎn)換為浮點(diǎn)型(默認(rèn)浮點(diǎn)型)的異常

使用alpha選項(xiàng)則是對(duì)字符串進(jìn)行排序

 127.0.0.1:6379> sadd set z x c n r a
 (integer) 6
 127.0.0.1:6379> smembers set
 1) "x"
 2) "n"
 3) "a"
 4) "r"
 5) "z"
 6) "c"
 127.0.0.1:6379> sort set alpha
 1) "a"
 2) "c"
 3) "n"
 4) "r"
 5) "x"
 6) "z"

by 選項(xiàng)

如果希望不是根據(jù)當(dāng)前集合的元素進(jìn)行排序,而是根據(jù)其他Key來排序則使用 by 選項(xiàng)

by *-value表示獲取當(dāng)前元素的key代替*-value拼接得到新的Key,查詢新Key得到的值拿來排序

這種情況下RedisSortObject中記錄的權(quán)值為新Key的值

比如當(dāng)前元素是cc 則新key為 cc-value ,查詢到新key值為88 因此排中間

如果新key結(jié)果為字符串 則要使用alpha 選項(xiàng)

 127.0.0.1:6379> sadd set tom cc jack
 (integer) 3
 127.0.0.1:6379> mset tom-value 99 cc-value 88 jack-value 77
 OK
 127.0.0.1:6379> smembers set
 1) "cc"
 2) "jack"
 3) "tom"
 127.0.0.1:6379> sort set by *-value
 1) "jack"
 2) "cc"
 3) "tom"
 #使用新key的值為字符串時(shí)使用alpha
 127.0.0.1:6379> mset tom-str a cc-str b jack-str c
 OK
 127.0.0.1:6379> sort set alpha by *-str
 1) "tom"
 2) "cc"
 3) "jack"

limit 選項(xiàng)

limit用來限制返回的數(shù)量,使用方式類比MySQL的limit

 127.0.0.1:6379> sort set alpha by *-str
 1) "tom"
 2) "cc"
 3) "jack"
 127.0.0.1:6379> sort set alpha by *-str limit 0 2
 1) "tom"
 2) "cc"
 127.0.0.1:6379> sort set alpha by *-str limit 1 2
 1) "cc"
 2) "jack"

get 選項(xiàng)

與by類似,但是by作用的是排序值,而get作用的是返回值

如果希望返回值不是當(dāng)前元素的值,而是其他key的返回值,則使用get

get *-res表示獲取當(dāng)前元素的key代替*-res拼接得到新的Key,查詢新Key得到的值用于返回結(jié)果

比如當(dāng)前元素是cc 則新key為 cc-res ,查詢到新key值為cc-result 因此響應(yīng)時(shí)返回cc-result

 127.0.0.1:6379> sort set alpha by *-str limit 0 3
 1) "tom"
 2) "cc"
 3) "jack"
 127.0.0.1:6379> mset tom-res tom-result cc-res cc-result jack-res jack-result
 OK
 127.0.0.1:6379> sort set alpha by *-str limit 0 3 get *-res
 1) "tom-result"
 2) "cc-result"
 3) "jack-result"

store 選項(xiàng)

sort不是對(duì)原本的對(duì)象在原地進(jìn)行排序,而是使用新數(shù)組來保存排序結(jié)果

使用store選項(xiàng)能將排序結(jié)果,使用list命令來生成Key,key為list類型

 127.0.0.1:6379> sort set alpha by *-str limit 0 3 get *-res
 1) "tom-result"
 2) "cc-result"
 3) "jack-result"
 127.0.0.1:6379> sort set alpha by *-str limit 0 3 get *-res store setresult
 (integer) 3
 127.0.0.1:6379> type setresult
 list
 127.0.0.1:6379> lrange setresult 0 -1
 1) "tom-result"
 2) "cc-result"
 3) "jack-result"

總結(jié)

本篇文章圍繞Sort命令,深入淺出的解析Sort命令原理以及使用

Sort命令使用新的等長(zhǎng)數(shù)組來對(duì)list、set、zset對(duì)象進(jìn)行排序,其中數(shù)組中的節(jié)點(diǎn)RedisSortObject存儲(chǔ)元素地址和權(quán)值,先使用節(jié)點(diǎn)記錄要排序?qū)ο笾性氐牡刂泛蜋?quán)值,再使用快速排序根據(jù)權(quán)值進(jìn)行排序然后返回

默認(rèn)情況下權(quán)值為浮點(diǎn)型,如果是對(duì)字符串類型排序,需要使用alpha選項(xiàng);

想要使用其他key作為權(quán)值排序時(shí)使用by選項(xiàng);

限制結(jié)果集返回使用limit;

想要返回其他key的值時(shí)使用get選項(xiàng);

想存儲(chǔ)結(jié)果并生成列表對(duì)象時(shí)使用store

參考資料

以上就是Redis排序命令Sort深入解析的詳細(xì)內(nèi)容,更多關(guān)于Redis Sort排序命令的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Redis哨兵模式的實(shí)現(xiàn)

    Redis哨兵模式的實(shí)現(xiàn)

    Redis的哨兵模式是一種用于自動(dòng)監(jiān)控Redis實(shí)例狀態(tài)并在主服務(wù)器出現(xiàn)故障時(shí)自動(dòng)切換到從服務(wù)器的機(jī)制,本文主要介紹了Redis哨兵模式的實(shí)現(xiàn),感興趣的可以了解一下
    2024-02-02
  • php結(jié)合redis實(shí)現(xiàn)高并發(fā)下的搶購(gòu)、秒殺功能的實(shí)例

    php結(jié)合redis實(shí)現(xiàn)高并發(fā)下的搶購(gòu)、秒殺功能的實(shí)例

    下面小編就為大家?guī)硪黄猵hp結(jié)合redis實(shí)現(xiàn)高并發(fā)下的搶購(gòu)、秒殺功能的實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-12-12
  • Redis實(shí)現(xiàn)分布式鎖的示例代碼

    Redis實(shí)現(xiàn)分布式鎖的示例代碼

    日常開發(fā)中,秒殺下單、搶紅包等等業(yè)務(wù)場(chǎng)景,都需要用到分布式鎖,本文主要介紹了Redis實(shí)現(xiàn)分布式鎖的示例代碼,感興趣的可以了解一下
    2023-10-10
  • 詳解centos7 yum安裝redis及常用命令

    詳解centos7 yum安裝redis及常用命令

    這篇文章主要介紹了centos7 yum安裝redis及常用命令,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Redis?延時(shí)任務(wù)實(shí)現(xiàn)及與定時(shí)任務(wù)區(qū)別詳解

    Redis?延時(shí)任務(wù)實(shí)現(xiàn)及與定時(shí)任務(wù)區(qū)別詳解

    這篇文章主要為大家介紹了Redis?延時(shí)任務(wù)實(shí)現(xiàn)及與定時(shí)任務(wù)區(qū)別詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • 淺談RedisTemplate和StringRedisTemplate的區(qū)別

    淺談RedisTemplate和StringRedisTemplate的區(qū)別

    本文主要介紹了RedisTemplate和StringRedisTemplate的區(qū)別及個(gè)人見解,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • Redis是單線程的嗎

    Redis是單線程的嗎

    Redis使用單線程的原因就是多線程并不能有效提升Redis的性能,相反可能還會(huì)降低性能,所以自然而然使用單線程,本文給大家詳細(xì)介紹了Redis為什么是單線程的,感興趣的朋友跟隨小編一起看看吧
    2023-06-06
  • redis淘汰策略的幾種實(shí)現(xiàn)

    redis淘汰策略的幾種實(shí)現(xiàn)

    redis內(nèi)存數(shù)據(jù)數(shù)據(jù)集大小升到一定大的時(shí)候,就會(huì)實(shí)行數(shù)據(jù)淘汰策略,本文主要介紹了redis淘汰策略的幾種實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-05-05
  • Redis?Lua同步鎖實(shí)現(xiàn)源碼解析

    Redis?Lua同步鎖實(shí)現(xiàn)源碼解析

    這篇文章主要為大家介紹了Redis?Lua同步鎖實(shí)現(xiàn)源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • 解密Redis助力雙11背后電商秒殺系統(tǒng)(推薦)

    解密Redis助力雙11背后電商秒殺系統(tǒng)(推薦)

    這篇文章主要介紹了解密Redis助力雙11背后電商秒殺系統(tǒng),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10

最新評(píng)論