Redis有序集合详解(8大常用命令及应用场景)

Redis有序集合详解(8大常用命令及应用场景)-mikechen

Redis支持五种的数据类型,包括字符串类型(String)、列表(list)、集合(set)、有序集合(zset)、哈希(hash),下面我重点详解Redis有序集合及应用场景@mikechen

Redis有序集合定义

Redis有序集合Sorted Set,和集合set一样也是 String 类型元素的集合,且成员不允许重复,也叫ZSet。

 

Redis有序集合命令

Sorted Set常用命令如下:

1.zadd命令

zadd向一个有序集合中加入一个,或者多个元素及其分数,为有序集合添加新成员。

zadd语法

zadd key score member [score member ...]

zadd示例:

ZADD class1:redis 98 mikechen
ZADD class1:redis 100 ada

 

2.zrem命令

zrem删除有序集合中指定成员。

zrem语法

ZREM key member [member ...]

zrem示例:

127.0.0.1:6379> ZREM class1:redis mikechen
(integer) 1

 

3.zcard命令

zcard获得有序集合中的元素数量。

zcard语法

ZCARD key

zcard示例

127.0.0.1:6379> zadd myset 1 m1 2 m2 3 m3 //添加分数为1,2,3的三个成员
(integer) 3
127.0.0.1:6379> zcard myset   //获取myset的成员个数,为3
(integer) 3

 

4.zcount命令

zcount返回集合中score值在[min,max]区间的元素数量,用于计算有序集合中指定分数区间的成员数量。

zcount语法

zcount key min max

zcount示例

127.0.0.1:6379> zadd myset 1 m1 2 m2 3 m3 //添加分数为1,2,3的三个成员
(integer) 3
127.0.0.1:6379> zcount myset 1 2//统计分数在[1,2]之间的成员个数
(integer) 2
127.0.0.1:6379> zcount myset 1 3//统计分数在[1,2]之间的成员个数
(integer) 3
127.0.0.1:6379> zcount myset 1 1//统计分数在[1,1]之间的成员个数
(integer) 1
127.0.0.1:6379>

 

5.zincrby命令

zincrby在集合的member分值上加increment。

zincrby语法

ZINCRBY key increment member

zincrby示例

127.0.0.1:6379> ZINCRBY class1:redis 50 tom
"50"
127.0.0.1:6379> ZSCORE class1:redis tom
"50"

 

6.zscore命令

zscore获得集合中member的分值。

zscore语法

ZSCORE key member

zscore示例

127.0.0.1:6379> ZSCORE class1:redis ada
"100"

 

7.zrank命令

zrank获得集合中member的排名(按分值从小到大)

zrank语法

ZRANK key member

zrank示例

127.0.0.1:6379> zadd myset 1 m1 2 m2 3 m3 //添加分数为1,2,3的三个成员
(integer) 3
127.0.0.1:6379> zrank myset m1
(integer) 0
127.0.0.1:6379> zrank myset m2
(integer) 1
127.0.0.1:6379> zrank myset m3
(integer) 2

 

8.zrange

zrange获得集合中指定区间成员,按分数递增排序。

zrange语法

ZRANGE key start stop [WITHSCORES]

zrange示例

127.0.0.1:6379> ZRANGE class1:redis 0 -1
1) "mikechen"
2) "ada"
127.0.0.1:6379> ZRANGE class1:redis 0 -1 WITHSCORES
1) "mikechen"
2) "99"
3) "ada"
4) "100"

 

Redis有序集合应用场景

有序集合的使用场景与集合类似,但是set集合不是自动有序的,而sorted set可以利用分数进行成员间的排序,而且是插入时就排序好。

Redis有序集合典型的使用场景有:

1、 排行榜:有序集合经典使用场景,例如视频网站需要对用户上传的视频做排行榜,按照时间、按照播放量、按照获得的赞数等。

2、用Sorted Sets来做带权重的队列,比如普通消息的score为1,重要消息的score为2,然后工作线程可以选择按score的倒序来获取工作任务,让重要的任务优先执行。

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复面试即可获取《史上最全阿里Java面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法