<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
Redis是一款快速、優秀的鍵值對資料庫,提供豐富的資料結構能在各種場景下實現功能,同時也提供豐富的命令來完成各種各樣的功能,本篇文章將深入淺出的解析Sort命令的原理以及使用
Sort 命令用來對list、set、zset物件進行排序,返回排序後的結果
Sort命令會使用一個與原來物件等長的陣列,陣列中的節點RedisSortObject儲存了元素(指向對應元素)以及權值,排序就是根據權值來排序,權值預設情況下是浮點型,如果要排序的是字串則權值為字串物件
等長陣列中的RedisSortObject節點會與排序物件中的元素一一對應記錄元素物件的地址和權值
再使用快速排序根據等長陣列中RedisSortObject物件中的權值進行排序(預設升序)
注意:排序只在新陣列中操作,並沒有改變原來的物件
圖中排序流程對應以下命令操作
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選項則是對字串進行排序
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"
如果希望不是根據當前集合的元素進行排序,而是根據其他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用來限制返回的數量,使用方式類比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"
與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"
sort不是對原本的物件在原地進行排序,而是使用新陣列來儲存排序結果
使用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命令使用新的等長陣列來對list、set、zset物件進行排序,其中陣列中的節點RedisSortObject儲存元素地址和權值,先使用節點記錄要排序物件中元素的地址和權值,再使用快速排序根據權值進行排序然後返回
預設情況下權值為浮點型,如果是對字串型別排序,需要使用alpha選項;
想要使用其他key作為權值排序時使用by選項;
限制結果集返回使用limit;
想要返回其他key的值時使用get選項;
想儲存結果並生成列表物件時使用store
參考資料
以上就是Redis排序命令Sort深入解析的詳細內容,更多關於Redis Sort排序命令的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45