Redis常用命令-Zset

本文介绍了Redis中的有序集合(Zset)数据结构及其应用。详细讲解了Zset的特点:有序、无重复,并能进行集合间的操作。此外,还列举了一系列重要的API,如Zadd、Zrem、Zcard等,用于管理和查询有序集合中的数据。

https://blog.youkuaiyun.com/xiaouncle/article/details/62236593

Redis是一个开源的速度非常快的非关系数据库,它可以存储键(key)与5种不同类型的值(value)之间的映射(mapping),可以将存储在内存的键值对数据持久化到硬盘,可以使用复制特性来扩展读性能,还可以使用客户端分片来扩展写性能。、 
请注意:存储在Redis中的数据并不会由于计算机的关机而从内存中消失,必须手动删除数据才会消失。

一、Zset键值结构

这里写图片描述 
有序集合中元素的特点:有序、无重复、可进行集合间操作

二、重要API

参数解释
ZaddZadd key-name score member [score member…]——将带有给定分值的成员添加到有序列表里面
ZremZrem key-name member [member…]——从有序集合里面移除给定的成员,并返回被移除成员的数量
ZcardZcard key-name——返回有序集合包含的成员数量
ZincrbyZincrby key-name increment member——将member成员的分值加上increment
ZcountZcount key-name min max——返回分值介于min和max之间的成员数量,包括min和max在内
ZrankZrank key-name member——返回成员member在有序集合中的排名,成员按照分值从小到大排列
ZrevrankZrevrank key-name member——返回成员member在有序集合中的排名 ,成员按照分值从大到小排列
ZscoreZscore key-name member——返回成员member的分值
ZrangeZrange key-name start stop [WITHSCORES]——返回有序集合中排名介于start和stop之间的成员,包括start和stop在内,如果给定了可选的WITHSCORES选项,那么命令会将成员的分值一并返回,成员按照分值从小到大排列
ZrevrangeZrevrange key-name start stop [WITHSCORES]——返回有序集合中排名介于start和stop之间的成员,包括start和stop在内,如果给定了可选的WITHSCORES选项,那么命令会将成员的分值一并返回,成员按照分值从大到小排列
ZrangebyscoreZrangebyscore key-name min max [WITHSCORES] [LIMIT offset count]——返回有序集合中分值介于min和max之间的所有成员,包括min和max在内,并按照分值从小到大的排序来返回他们
ZrevrangebyscoreZrevrangebyscore key-name min max [WITHSCORES] [LIMIT offset count]——返回有序集合中分值介于min和max之间的所有成员,包括min和max在内,并按照分值从大到小的排序来返回他们
ZremrangebyrankZremrangebyrank key-name start stop——移除有序集合中排名介于start和stop之间的所有成员,包括start和stop在内
ZremrangebyscoreZremrangebyscore key-name key min max——移除有序集合中分值介于min和max之间的所有成员,包括min和max在内
ZinterstoreZinterstore dest-key key-count key [key…][WEIGHTS weight [weight…]] [AGGREGATE SUM|MIN|MAX]——对给定的有序集合执行类似于集合的交集运算
ZunionstoreZunionstore dest-key key-count key [key…][WEIGHTS weight [weight…]] [AGGREGATE SUM|MIN|MAX]——对给定的有序集合执行类似于集合的并集运算

实例演示: 
zset-key1中的元素: 
val5    10 
member3  32 
member5  40 
member6  50

zset-key2中的元素: 
val1    10 
val2    20 
val3    30 
val4    40 
val5    50 
member3  60 
member5  70

Zinterstore zset-key3 2 zset-key1 zset-key2 
zset-key3中的元素: 
val5    50 
member3  60 
member5  70

Zunionstore zset-key4 2 zset-key1 zset-key2 
zset-key4中的元素: 
val1    10 
val2    20 
val3    30 
val4    40 
member6  50 
val5    60(50+10) 
member3  92(32+60) 
member5  110(40+70)

Redis 中,Sorted Set(有序集合)是一种非常强大的数据结构,它不仅支持 Set 的去重特性,还允许为每个元素关联一个分数(score),从而实现基于分数的排序。以下是 Redis 中与 Sorted Set 相关的常用命令及其用途: ### 添加与更新元素 - `ZADD key score member [score member ...]`:向有序集合中添加一个或多个元素,并指定其分数。如果元素已存在,则更新其分数。该命令支持多个元素的批量操作。 - `ZINCRBY key increment member`:为有序集合中某个成员的分数增加指定的增量。如果成员不存在,则先创建该成员并将其分数设为 `increment`。 ### 查询操作 - `ZRANGE key start stop [WITHSCORES]`:按分数从小到大返回有序集合中指定范围内的成员。`start` 和 `stop` 是索引值,`WITHSCORES` 表示是否返回成员的分数。 - `ZREVRANGE key start stop [WITHSCORES]`:按分数从大到小返回有序集合中指定范围内的成员。 - `ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]`:返回分数在指定区间 `[min, max]` 内的成员,支持分页查询。 - `ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]`:与 `ZRANGEBYSCORE` 类似,但按分数从高到低返回结果。 - `ZRANK key member`:返回指定成员在有序集合中的排名(按分数从小到大排列)。 - `ZREVRANK key member`:返回指定成员在有序集合中的逆序排名(按分数从高到低排列)。 ### 删除操作 - `ZREM key member [member ...]`:从有序集合中删除一个或多个指定成员。 - `ZREMRANGEBYRANK key start stop`:删除指定排名范围内的所有成员。 - `ZREMRANGEBYSCORE key min max`:删除分数在指定区间内的所有成员。 ### 集合运算 - `ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]`:计算多个有序集合的交集,并将结果存储到一个新的有序集合中。支持为每个集合设置权重,并指定聚合方式(默认为 `SUM`)。 - `ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]`:计算多个有序集合的并集,并将结果存储到一个新的有序集合中。同样支持权重和聚合方式。 ### 其他常用命令 - `ZCARD key`:返回有序集合中的成员数量。 - `ZCOUNT key min max`:统计分数在指定区间内的成员数量。 - `ZSCORE key member`:获取指定成员的分数。 - `ZLEXCOUNT key min max`:当所有成员的分数相同时,可以使用该命令按字典序统计成员数量。 这些命令可以广泛应用于排行榜、实时统计、范围查询等场景。例如,在实现一个游戏排行榜时,可以使用 `ZADD` 添加玩家得分,使用 `ZRANGE` 获取排名前 N 的玩家,使用 `ZINCRBY` 更新玩家得分等。 ### 示例代码 以下是一个使用 Python 和 `redis-py` 客户端操作 Sorted Set 的示例: ```python import redis # 连接到 Redis 服务器 r = redis.StrictRedis(host='localhost', port=6379, db=0) # 添加成员及其分数 r.zadd('leaderboard', {'player1': 100, 'player2': 150, 'player3': 80}) # 获取排名前 3 的玩家 top_players = r.zrange('leaderboard', 0, 2, withscores=True) print("Top Players:", top_players) # 更新某个玩家的分数 r.zincrby('leaderboard', 50, 'player1') # 获取更新后的排名 updated_top_players = r.zrange('leaderboard', 0, 2, withscores=True) print("Updated Top Players:", updated_top_players) # 获取某个玩家的当前分数 score = r.zscore('leaderboard', 'player1') print("Player1's Score:", score) # 删除某个玩家 r.zrem('leaderboard', 'player3') # 获取最终的排行榜 final_leaderboard = r.zrange('leaderboard', 0, -1, withscores=True) print("Final Leaderboard:", final_leaderboard) ``` 通过上述命令和示例代码,开发者可以灵活地利用 Redis 的 Sorted Set 功能来满足各种业务需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值