Redis Zset类型详细使用

一、Zset的常用命令 

(一)ZADD:添加或更新元素

要是你想往Zset里加东西,或者更新一下已有的元素,那就用ZADD命令吧。分数必须是双精度浮点数,正无穷大(+inf)和负无穷大(-inf)也是可以的。

语法是这样的:

ZADD key [NX | XX] [GT | LT] [CH] [INCR] score member [score member ...]

• XX:只更新已经存在的元素,不会添加新的。

• NX:只添加新的元素,不会更新已有的。

• CH:默认情况下,ZADD返回的是添加的元素个数,但加上这个选项后,还会包含更新的元素个数。

• INCR:这时候命令就和ZINCRBY差不多了,会给元素的分数加上指定的分数,不过只能指定一个元素和分数。

时间复杂度是O(log(N)),返回值是添加成功的元素个数。

举个例子:

redis> ZADD myzset 1 "one"
(integer) 1
redis> ZADD myzset 1 "uno"
(integer) 1
redis> ZADD myzset 2 "two" 3 "three"
(integer) 2
redis> ZRANGE myzset 0 -1 WITHSCORES
1) "one"
2) "1"
3) "uno"
4) "1"
5) "two"
6) "2"
7) "three"
8) "3"

(二)ZCARD:数数Zset里有多少元素

想知道Zset里有多少个元素?用ZCARD命令就行啦。它的时间复杂度是O(1),返回值就是Zset里的元素个数。

比如:

redis> ZADD myzset 1 "one"
(integer) 1
redis> ZADD myzset 2 "two"
(integer) 1
redis> ZCARD myzset
(integer) 2

(三)ZCOUNT:数数分数范围内的元素

ZCOUNT命令可以帮你数一数分数在某个范围内的元素有多少个。默认情况下,范围的上下限都是包含在内的,但你可以用(来排除某个边界。

语法是:

ZCOUNT key min max

时间复杂度是O(log(N)),返回值是满足条件的元素个数。

例如:

redis> ZADD myzset 1 "one"
(integer) 1
redis> ZADD myzset 2 "two"
(integer) 1
redis> ZADD myzset 3 "three"
(integer) 1
redis> ZCOUNT myzset -inf +inf
(integer) 3
redis> ZCOUNT myzset (1 3
(integer) 2

(四)ZRANGE:按分数升序获取元素

如果你想按照分数从小到大的顺序获取Zset里的元素,那就用ZRANGE命令吧。还能带上WITHSCORES选项,把分数也一起返回。

语法:

ZRANGE key start stop [WITHSCORES]

时间复杂度是O(log(N)+M),返回值是区间内的元素列表。

例如:

redis> ZADD myzset 1 "one" 2 "two" 3 "three"
(integer) 3
redis> ZRANGE myzset 0 -1
1) "one"
2) "two"
3) "three"
redis> ZRANGE myzset 2 3
1) "three"
redis> ZRANGE myzset -2 -1
1) "two"
2) "three"

(五)ZREVRANGE:按分数降序获取元素

和ZR

### 使用 Redis ZSet 数据结构 #### 创建和操作 ZSet ZSet 是一种有序集合的数据类型,在其中每个元素都关联着一个浮点数分值(score),这使得可以基于分值对集合中的成员进行排序。当两个成员具有相同的分值时,则按照字典顺序排列。 为了向名为 `myzset` 的 ZSet 添加新条目,可利用如下 Python 代码: ```python import redis client = redis.Redis(host='localhost', port=6379, db=0) # 向 myzset 中添加三个不同的成员并指定它们各自的得分 client.zadd('myzset', {'member1': 1.0, 'member2': 2.0, 'member3': 3.0}) ``` #### 查询 ZSet 成员 查询某个特定键所对应的全部成员以及其相应的分值可以通过下面的方法完成: ```python # 获取 myzset 下所有的成员及其分数 (按升序) members_with_scores_asc = client.zrange('myzset', 0, -1, withscores=True) print(members_with_scores_asc) # 获取 myzset 下所有的成员及其分数 (按降序) members_with_scores_desc = client.zrevrange('myzset', 0, -1, withscores=True) print(members_with_scores_desc) ``` #### 更新成员的分值 更新现有成员的分值可通过调用 `zincrby()` 方法实现;此函数接受要修改的键名、增量值及目标成员名称作为参数[^1]。 ```python # 将 member2 的得分增加 5 分 updated_score = client.zincrby('myzset', 5, 'member2') print(updated_score) ``` #### 应用场景实例:排行榜功能 考虑到社交平台上的点赞机制,每当用户给某篇文章点赞之后,服务器端就可以执行一次 `zincrby` 来提高这篇文章对应记录里的计数值。这样做的好处在于能够快速获取最热门的文章列表而无需频繁扫描整个数据库表项。对于此类需求而言,ZSets 提供了一种高效且易于使用的解决方案[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值