有序集合
Redis有序集合中每個元素都會關聯一個double類型的分數。Redis通過分數來為集合中的成員進行從小到大的排序。
有序集合中的成員是唯一的,但分數(score)可以重復。
zadd name 2 kang
zadd name 1 li
zadd name 3 wang
zadd name 1 zhao
zrange name 0 -1
# 返回值:
# 1) "li"
# 2) "zhao"
# 3) "kang"
# 4) "wang"
SORT命令
Redis中SORT
命令可以對列表類型、集合類型以及有序集合類型鍵進行排序,並返回顯示排序的結果,但是不會對原有數據進行修改。
在對有序集合烈性排序時回忽略元素的分數,只針對元素自身的值進行排序。
常用參數介紹
參數 | 描述 |
---|---|
DESC | 使目標倒序排列 |
ALPHA | 針對非數字元素排序 |
LIMIT | 參數可以指定返回值范圍 即跳過 offset 個元素並取之后的count 個元素 |
BY | 基於參考鍵進行排序 |
STORE | 保存排序結果 |
針對數字元素進行排序
# 對集合進行排序操作
sadd temperature 0 18 16 -1 5 -6
sort temperature
# 正序排序返回值:
# 1) "-6"
# 2) "-1"
# 3) "0"
# 4) "5"
# 5) "16"
# 6) "18"
sort temperature desc
# 倒序排序返回值:
# 1) "18"
# 2) "16"
# 3) "5"
# 4) "0"
# 5) "-1"
# 6) "-6"
# 對列表進行排序
lpush age 23 18 16 22 26 28 42
lrange age 0 -1
# 返回值:
# 1) "42"
# 2) "28"
# 3) "26"
# 4) "22"
# 5) "16"
# 6) "18"
# 7) "23"
sort age
# 正序排序返回值:
# 1) "16"
# 2) "18"
# 3) "22"
# 4) "23"
# 5) "26"
# 6) "28"
# 7) "42"
sort age desc
# 倒序排序返回值:
# 1) "42"
# 2) "28"
# 3) "26"
# 4) "23"
# 5) "22"
# 6) "18"
# 7) "16"
# 對有序集合進行排序
zadd score 1 20 2 40 3 10 4 88
zrange scroe 0 -1
# 返回值:
# 1) "20"
# 2) "40"
# 3) "10"
# 4) "88"
sort score
# 正序排序返回值:
# 1) "10"
# 2) "20"
# 3) "40"
# 4) "88"
sort score desc
# 倒序排序返回值:
# 1) "88"
# 2) "40"
# 3) "20"
# 4) "10"
針對非數字元素排序
lpush name zhao qian sun li
sort name
# 返回值:
# (error) ERR One or more scores can't be converted into double
sort name alpha
# 正序排序返回值
# 1) "li"
# 2) "qian"
# 3) "sun"
# 4) "zhao"
sort name alpha desc
# 倒序排序返回值:
# 1) "zhao"
# 2) "sun"
# 3) "qian"
# 4) "li"
按范圍獲取排序結果
lpush age 18 20 22 16 14 23
sort age limit 2 -1
# 返回值:
# 1) "18"
# 2) "20"
# 3) "22"
# 4) "23"
基於參考鍵進行排序
BY
參數的語法為BY 參考鍵
,其中參考鍵可以是字符串類型鍵或散列類型鍵的某個字段。
如果使用了BY
屬性,SORT
命令將根據對應參考鍵的值進行排序。
當鍵名為常量時,SORT
命令將不會執行排序操作。
lpush stuno 001 002 003
mset name_001 kang age_001 18
mset name_002 zhao age_001 23
mset name_003 liu age_001 16
sort stuno by age_*
# 返回值:
# 1) "002"
# 2) "003"
# 3) "001"
lpush stuno 001 002 003
MSET name kang age 18
sort stuno by age
# 返回值:
# 1) "003"
# 2) "002"
# 3) "001"
當參考鍵名中不包含“*”時(即鍵名為常量),
SORT
命令將不執行排序操作。
保存排序結果
STORE
參數可以保存SORT
排序結果,保存后的鍵的類型為列表類型,如果鍵已經存在,則會覆蓋。
lpush age 18 23 16 24
sort age store result
lrange result 0 -1
# 返回值:
# 1) "16"
# 2) "18"
# 3) "23"
# 4) "24"
注意事項
- 盡可能減少待排序鍵中元素的個數
- 多使用
LIMIT
參數獲取數據 - 如果排序數據量過大,盡可能使用
STORE
參數緩存結果