redis 排序命令


排序 sort

redis基本命令--集合(set)類型 中,我們提到過有序集合。有序集合常見的場景是大數據排序

除了有序集合外,我們可以借助redis的sort命令來排序。

lpush mylist 4 2 6 1 3 7
sort mylist

在對有序集合排序的時候會忽略元素的分數,之針對元素自身的值進行排序

zadd myzset 50 2 40 3 20 1 60 5
sort myzset
## 結果是 1 2 3 5;分數 50 ..會被忽略

sort 命令還可以通過 ALPHA 參數實現按照字典順序排列非數字元素:

lpush mylistalpha a c e d B C A 
sort mylistalpha
## 這一步會報錯。因為sort會試圖將元素轉成浮點數,但是轉換失敗
sort mylistalpha alpha
## 實測結果:1) "a"2) "A"3) "B"4) "c"5) "C"6) "d"7) "e
## 理論結果為 A B C a c d e 

sort命令可以逆序排序:

sort mylist desc

sorrt 分頁; sort 可以和 limit 組合使用

sort mylist limit 1 2

上面結果表示對 mylist 排序后,從第2位取2個元素

by 參數/參考鍵

lpush sortbylist 2 1 3 
set itemscore:1 50
set itemscore:2 100
set itemscore:3 -10
## 根據得分逆序排序:結果為 2 1 3
sort sortbylist by itemscore:* desc

當參考鍵不包括 "*" 時,sort 命令講不會執行排序操作,因為redis 認為這是沒有意義的。

當某個參考鍵不存在的時候,回默認參考鍵的值為 0

lpush sortbylist 5 
sort sortbylist by itemscore:* desc
# 結果為 2 4 1 5 3;5的參考鍵不存在,默認為 > 3 的 -10

get 參數:排序后確認需要獲取的信息.sort語句后面可以跟多個get ,get # 可以獲取自身信息

### 制造測試數據
redis 127.0.0.1:6379> LPUSH uid 1
redis 127.0.0.1:6379> SET user_name_1 admin
redis 127.0.0.1:6379> SET user_level_1 9999
redis 127.0.0.1:6379> LPUSH uid 2
redis 127.0.0.1:6379> SET user_name_2 jack
redis 127.0.0.1:6379> SET user_level_2 10
# peter
redis 127.0.0.1:6379> LPUSH uid 3
redis 127.0.0.1:6379> SET user_name_3 peter
redis 127.0.0.1:6379> SET user_level_3 25
redis 127.0.0.1:6379> LPUSH uid 4
redis 127.0.0.1:6379> SET user_name_4 mary
redis 127.0.0.1:6379> SET user_level_4 70

## 排序
sort uid 
## 結果: 1 2 3 4
sort uid by user_level_*
## 結果 2 3 4 1
sort uid get user_name_* get #
#結果 admin 1 jack 2 peter 3 mary 4

store 參數;將排序的結果保存。保存的結果類型為集合類型

sort uid get user_name_* get # store sort.reuslt
type sort.result  ## list
lrange sort.result 0 -1 # 查看列表信息


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM