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

Redis排序命令Sort深入解析

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

引言

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

原理

Sort 命令用來對list、set、zset對象進行排序,返回排序后的結果

Sort命令會使用一個與原來對象等長的數(shù)組,數(shù)組中的節(jié)點RedisSortObject存儲了元素(指向對應元素)以及權值,排序就是根據(jù)權值來排序,權值默認情況下是浮點型,如果要排序的是字符串則權值為字符串對象

等長數(shù)組中的RedisSortObject節(jié)點會與排序對象中的元素一一對應記錄元素對象的地址和權值

再使用快速排序根據(jù)等長數(shù)組中RedisSortObject對象中的權值進行排序(默認升序)

注意:排序只在新數(shù)組中操作,并沒有改變原來的對象

圖中排序流程對應以下命令操作

 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 選項

alpha選項對字符串進行排序,如果對字符串進行排序不使用alpha會報出字符串無法轉換為浮點型(默認浮點型)的異常

使用alpha選項則是對字符串進行排序

 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 選項

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

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

這種情況下RedisSortObject中記錄的權值為新Key的值

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

如果新key結果為字符串 則要使用alpha 選項

 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的值為字符串時使用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 選項

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 選項

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

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

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

比如當前元素是cc 則新key為 cc-res ,查詢到新key值為cc-result 因此響應時返回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 選項

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

使用store選項能將排序結果,使用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"

總結

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

Sort命令使用新的等長數(shù)組來對list、set、zset對象進行排序,其中數(shù)組中的節(jié)點RedisSortObject存儲元素地址和權值,先使用節(jié)點記錄要排序對象中元素的地址和權值,再使用快速排序根據(jù)權值進行排序然后返回

默認情況下權值為浮點型,如果是對字符串類型排序,需要使用alpha選項;

想要使用其他key作為權值排序時使用by選項;

限制結果集返回使用limit;

想要返回其他key的值時使用get選項;

想存儲結果并生成列表對象時使用store

參考資料

以上就是Redis排序命令Sort深入解析的詳細內容,更多關于Redis Sort排序命令的資料請關注腳本之家其它相關文章!

相關文章

  • redis鍵值出現(xiàn)\xac\xed\x00\x05t\x00&的問題及解決

    redis鍵值出現(xiàn)\xac\xed\x00\x05t\x00&的問題及解決

    這篇文章主要介紹了redis鍵值出現(xiàn)\xac\xed\x00\x05t\x00&的問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • redis數(shù)據(jù)傾斜處理方法

    redis數(shù)據(jù)傾斜處理方法

    我們在使用Redis分片集群時,集群最好的狀態(tài)就是每個實例可以處理相同或相近比例的請求,但如果不是這樣,則會出現(xiàn)某些實例壓力特別大,而某些實例特別空閑的情況發(fā)生,本文就一起來看下這種情況是如何發(fā)生的以及如何處理
    2022-12-12
  • Java Socket實現(xiàn)Redis客戶端的詳細說明

    Java Socket實現(xiàn)Redis客戶端的詳細說明

    socket編程是一門技術,它主要是在網(wǎng)絡通信中經(jīng)常用到.這篇文章主要介紹了如何用Java Socket實現(xiàn)一個簡單的Redis客戶端,需要的朋友可以參考下
    2021-05-05
  • Redis的setNX分布式鎖超時時間失效 -1問題及解決

    Redis的setNX分布式鎖超時時間失效 -1問題及解決

    這篇文章主要介紹了Redis的setNX分布式鎖超時時間失效 -1問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • Redis主從復制分步講解使用

    Redis主從復制分步講解使用

    Redis因為其高性能和易用性在我們后端的服務中發(fā)揮了巨大的作用,并且很多重要功能的實現(xiàn)都會依賴redis,本篇我們來了解Redis高可用主從復制,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2022-09-09
  • Redis安裝使用RedisJSON模塊的方法

    Redis安裝使用RedisJSON模塊的方法

    在使用Redis中,我們可以使用大量的Redis模塊來擴展Redis的功能,本文主要介紹了Redis安裝使用RedisJSON模塊的方法,具有一定的參考價值,感興趣的可以了解一下
    2022-03-03
  • 使用Redis實現(xiàn)JWT令牌主動失效機制

    使用Redis實現(xiàn)JWT令牌主動失效機制

    JWT是一種輕量級的身份驗證和授權機制,它是一種 JSON 格式的數(shù)據(jù)串,通常用于客戶端和服務端之間的單點登錄(Single Sign-On, SSO)場景,本文給大家介紹了如何使用Redis來實現(xiàn)JWT令牌主動失效機制,需要的朋友可以參考下
    2024-08-08
  • redis 限制內存使用大小的實現(xiàn)

    redis 限制內存使用大小的實現(xiàn)

    這篇文章主要介紹了redis 限制內存使用大小的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-05-05
  • redis啟動流程介紹

    redis啟動流程介紹

    這篇文章主要介紹了redis啟動流程介紹,本文更分5步,分別是準備運行環(huán)境、解析命令行參數(shù)、initServer()初始化服務、loadDataFromDisk()從rdb或aof文件加載數(shù)據(jù)、aeMain()開始事件循環(huán),接收客戶端請求,需要的朋友可以參考下
    2015-01-01
  • Redisson分布式限流的實現(xiàn)原理分析

    Redisson分布式限流的實現(xiàn)原理分析

    這篇文章主要介紹了Redisson分布式限流的實現(xiàn)原理分析,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07

最新評論

仲巴县| 湄潭县| 东乡族自治县| 台东县| 乐山市| 九龙坡区| 淳化县| 北宁市| 巫山县| 盐城市| 大港区| 柳河县| 梨树县| 汶川县| 玉田县| 临城县| 邢台市| 墨玉县| 民乐县| 华坪县| 安塞县| 奉节县| 哈尔滨市| 杭锦后旗| 景宁| 阿克陶县| 安陆市| 渭源县| 古浪县| 夹江县| 瑞金市| 腾冲县| 军事| 湖州市| 新昌县| 灵台县| 晋江市| 桑日县| 青浦区| 攀枝花市| 定襄县|