排序 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 # 查看列表信息