📜  Redis-排序集(1)

📅  最后修改于: 2023-12-03 15:19:47.524000             🧑  作者: Mango

Redis 排序集

Redis 是一个高性能、基于内存、键值对存储数据库,支持多种数据结构,其中之一就是排序集(Sorted Set)。

排序集类似于集合,不同之处在于增加了一个权重参数 score,用于对集合中的元素进行排序。每个元素都唯一对应一个 value 和一个 score,可根据 score 进行排序、范围查找等操作,同时支持哈希表、集合等操作。

基本操作
添加元素

可以用 ZADD 命令添加元素,语法如下:

ZADD key score member [score member ...]

其中,key 为排序集的键名,score 是元素的权重参数,member 是元素的值。

示例:

127.0.0.1:6379> ZADD myset 1 "one"
(integer) 1
127.0.0.1:6379> ZADD myset 2 "two"
(integer) 1
127.0.0.1:6379> ZADD myset 3 "three"
(integer) 1
计数元素

可以用 ZCARD 命令计数元素数量,语法如下:

ZCARD key

示例:

127.0.0.1:6379> ZCARD myset
(integer) 3
查找元素

可以用 ZRANGE 命令指定范围查找元素,语法如下:

ZRANGE key start stop [WITHSCORES]

其中,key 为排序集的键名,start 和 stop 是元素在排序集中的位置,可用负数表示倒序位置。WITHSCORES 参数可选,表示同时返回元素的权重参数。

示例:

127.0.0.1:6379> ZRANGE myset 0 -1
1) "one"
2) "two"
3) "three"
127.0.0.1:6379> ZRANGE myset 0 -1 WITHSCORES
1) "one"
2) "1"
3) "two"
4) "2"
5) "three"
6) "3"
计算元素得分

可以用 ZSCORE 命令计算元素得分,语法如下:

ZSCORE key member

其中,key 为排序集的键名,member 是元素的值。

示例:

127.0.0.1:6379> ZSCORE myset "one"
"1"
删除元素

可以用 ZREM 命令删除元素,语法如下:

ZREM key member [member ...]

其中,key 为排序集的键名,member 是元素的值。

示例:

127.0.0.1:6379> ZREM myset "one"
(integer) 1
127.0.0.1:6379> ZCARD myset
(integer) 2
高级操作
元素范围计数

可以用 ZCOUNT 命令计数元素在指定范围内的数量,语法如下:

ZCOUNT key min max

其中,key 为排序集的键名,min 和 max 是范围限制,可以用 -inf+inf 表示负无穷和正无穷。

示例:

127.0.0.1:6379> ZCOUNT myset 1 2
(integer) 2
元素权重增加

可以用 ZINCRBY 命令增加元素的权重,语法如下:

ZINCRBY key increment member

其中,key 为排序集的键名,increment 是要增加的权重,member 是元素的值,如果元素不存在,则会添加一个新元素。

示例:

127.0.0.1:6379> ZINCRBY myset 2 "one"
"3"
127.0.0.1:6379> ZSCORE myset "one"
"3"
元素排名计算

可以用 ZRANK 命令计算元素在排序集中的排名,语法如下:

ZRANK key member

其中,key 为排序集的键名,member 是元素的值,返回元素在排序集中的排名(从 0 开始)。

示例:

127.0.0.1:6379> ZRANK myset "two"
(integer) 1
元素范围排名

可以用 ZRANGEBYSCORE 命令指定范围查找元素的排名,语法如下:

ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]

其中,key 为排序集的键名,min 和 max 是范围限制,WITHSCORES 参数可选,表示同时返回元素的权重参数,LIMIT 参数可选,表示返回指定偏移量和数量的数据。

示例:

127.0.0.1:6379> ZRANGEBYSCORE myset 2 3 WITHSCORES
1) "two"
2) "2"
3) "three"
4) "3"
127.0.0.1:6379> ZRANGEBYSCORE myset 2 3 WITHSCORES LIMIT 0 1
1) "two"
2) "2"

除此之外,还有其他常见的操作,例如元素范围删除、交集并集等,这里不再一一列举。

总结

Redis 排序集是一种高效的排序数据结构,适用于各种需要排序的场景,如排行榜、时间轴等。学习和掌握 Redis 排序集的使用方法,可以在实际项目中提高数据操作的效率和精度。