Redis基本操作进阶篇学习

database

Redis中SORT命令可以对列表类型、集合类型以及有序集合类型键进行排序,并返回显示排序的结果,但是不会对原有数据进行修改。

有序集合

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参数缓存结果

以上是 Redis基本操作进阶篇学习 的全部内容, 来源链接: utcz.com/z/536204.html

回到顶部