3

Redis基本操作进阶篇学习--排序

 2 years ago
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.
neoserver,ios ssh client

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

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK