Redis基本操作進階篇學習--排序


有序集合

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"

注意事項

  1. 盡可能減少待排序鍵中元素的個數
  2. 多使用LIMIT參數獲取數據
  3. 如果排序數據量過大,盡可能使用STORE參數緩存結果


免責聲明!

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



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