Redis有序集合(sorted set)
概述
Redis 有序集合和集合一样也是 string 类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个 double 类型的分数。redis 正是通过分数来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但分数(score)却可以重复。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。
zadd
添加元素,里面包括年龄和名称,根据数值从小到大排列,如果继续添加元素:①值已存在,则数值覆盖②值不存在,就会添加进去
zadd key 数值1 字段1 数值2 字段2 …
127.0.0.1:6379> zadd age 11 tom 8 jack 22 mary
(integer) 3
zrange
查找元素
位置下标从0开始,结束位置如果是-1代表是最后一个
zrange key start end
127.0.0.1:6379> zrange age 0 -1
1)”jack”
2)”tom”
3)”mary”
显示数值
上面没有显示数值,命令后面加上withscores可以显示数值
zrange key 0 -1 withscores
127.0.0.1:6379> zrange age 0 -1 withscores
1)”jack”
2)”8”
3)”tom”
4)”11”
5)”mary”
6)”22”
zrevrange
降序排列,和zrange相反
zrevrange key start end withscores
127.0.0.1:6379> zrevrange age 0 -1 withscores
1)”mary”
2)”22”
3)”tom”
4)”11”
5)”jack”
6)”8”
zrem
删除一个或多个元素
zrem key 字段1 字段2 …
127.0.0.1:6379> zrange age 0 -1
1)”sherry”
2)”jack”
3)”tom”
4)”mary”
127.0.0.1:6379> zrem age sherry
(integer) 1
127.0.0.1:6379> zrange age 0 -1
1)”jack”
2)”tom”
3)”mary”
zcard
查看集合里的元素个数
zcard key
127.0.0.1:6379> zcard age
(integer) 3
zremrangebyrank
根据排名来删除元素
zremrangebyrank key start end
127.0.0.1:6379> zrange age 0 -1 withscores
1)”aa”
2)”1”
3)”bb”
4)”2”
5)”jack”
6)”8”
7)”tom”
8)”11”
9)”mary”
10)”22”
127.0.0.1:6379> zremrangebyrank age 0 1
(integer) 2
127.0.0.1:6379> zrange age 0 -1 withscores
1)”jack”
2)”8”
3)”tom”
4)”11”
5)”mary”
6)”22”
zremrangebyscore
根据数值范围来删除元素(包含)
zremrangebyscore key min max
127.0.0.1:6379> zrange age 0 -1 withscores
1)”aa”
2)”1”
3)”bb”
4)”2”
5)”jack”
6)”8”
7)”tom”
8)”11”
9)”mary”
10)”22”
127.0.0.1:6379> zremrangebyscore age 0 4
(integer) 2
127.0.0.1:6379> zrange age 0 -1 withscores
1)”jack”
2)”8”
3)”tom”
4)”11”
5)”mary”
6)”22”
zrangebyscore
根据评分范围来查找元素
zrangebyscore key min max withscores
127.0.0.1:6379> zrange age 0 -1 withscores
1)”jack”
2)”8”
3)”tom”
4)”11”
5)”mary”
6)”22”
127.0.0.1:6379> zrangebyscore age 8 11 withscores
1)”jack”
2)”8”
3)”tom”
4)”11”
限定查找起始
第一个元素的下标为0,end为-1时查全部
zrangebyscore key min max withscores limit statr end
127.0.0.1:6379> zrangebyscore age 0 100 withscores limit 0 2
1)”jack”
2)”8”
3)”tom”
4)”11”
zincrby
给指定元素加分
zincrby key 数值 字段名
127.0.0.1:6379> zrange age 0 -1 withscores
1)”jack”
2)”8”
3)”tom”
4)”11”
5)”mary”
6)”22”
127.0.0.1:6379> zincrby age 2 jack
“10”
127.0.0.1:6379> zrange age 0 -1 withscores
1)”jack”
2)”10”
3)”tom”
4)”11”
5)”mary”
6)”22”
zcount
查找指定数值范围的元素个数
zcount key min max
127.0.0.1:6379> zrange age 0 -1 withscores
1)”jack”
2)”10”
3)”tom”
4)”11”
5)”mary”
6)”22”
127.0.0.1:6379> zcount age 9 10
(integer) 1