Redis基本操作进阶篇学习--排序
source link: https://www.cnblogs.com/kangyz/p/15741445.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
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
参数缓存结果
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK