有序排行榜的工具类,redis的opsForZset

最近接了一个游戏需求,里面有个点就是排行榜。

如果自己用队列,然后针对每条插入数据都进行排序,显然很低效。之前看过redis支持的类型有5中,String,list,set,sortedSet,map。刚好这次可以用一下sortedSet这个有序集合

关于redis的配置,我有空会在另外一个章节里面梳理下,其实不大喜欢写配置,因为网上一大堆,这一章主要讲解一下opsForZset的几个方法。

1、先看它的add方法,Boolean add(K key, V value, double score);

这个有序队列的结构就是Key,Value,Score

key就是这个有序队列的key,

value表示一个你需要排序附带的值,比如你可以放一个用户的ID或者其他的。

Score表示一个分数,所有的排序都是基于这个score。可以正序排列,也可以倒叙排列。

 

2、Set< V > range(K key, long start, long end);  正序

Set reverseRange(K key, long start, long end);倒叙

获取队列的方法,start表示起始位置的index,从0开始。index表示end的位置,-1表示获取全部

opsForZSet.range("key",0,-1),表示获取key队列的所有元素。

对应的方法还有几个

Set< TypedTuple< V >> rangeWithScores(K key, long start, long end);

Set< TypedTuple< V >> reverseRangeWithScores(K key, long start, long end);

这两个方法跟上面的方法差不多,只是返回的时候回带上score,有时候业务需要输出这个score,比如排行榜的分数,你就可以用2个这个。

 

3、

Set< V > rangeByScore(K key, double min, double max);

Set< V > reverseRangeByScore(K key, double min, double max);

这俩方法表示在某个分数区间内的集合。min表示最小的分数,max表示最大的分数,集合返回在min和max之间的集合有哪些。

业务场景:比如某个分数区间内的用户数量统计,或者对这些用户给予一些奖励。具体就不赘述了。

类似的方法如下

Set< TypedTuple< V >> rangeByScoreWithScores(K key, double min, double max);

Set< TypedTuple< V >> rangeByScoreWithScores(K key, double min, double max, long offset, long count);

Set< TypedTuple< V >> reverseRangeByScoreWithScores(K key, double min, double max);

Set< V > reverseRangeByScore(K key, double min, double max, long offset, long count);

Set< TypedTuple< V >> reverseRangeByScoreWithScores(K key, double min, double max, long offset, long count);

这几个方法比较类似,要么是倒叙,要么是对返回对象进行了限制输出,加上了offset,count来限制输出的对象,就是类似于数据库的limit,offset。

 

4、

Long size(K key);

Long zCard(K key);

这两方法表示的都是这个队列的长度,不知道为啥要写俩个,size()底层就是调用的zCard()

 

5、

Long unionAndStore(K key, K otherKey, K destKey);

Long unionAndStore(K key, Collection< K > otherKeys, K destKey);

这两个方法挺有意思的,意思不仅仅是去重,而且会把重复的数据score进行相加,返回值是这个集合的长度

先解释第一个,key,otherKey这两个key的有序队列进行相加,如果两个队列中存在相同的value,就将value的score相加,最终将最后的组合结果放到destKey中。

第二个方法则是多了一个集合参数,多个集合可以用同一个方法,节省代码,举个简单的例子:

 

Long unionAndStore2 = opsForZSet.unionAndStore("A", Arrays.asList("B","C"), "D");

 

6、

Long intersectAndStore(K key, K otherKey, K destKey);

Long intersectAndStore(K key, Collection< K > otherKeys, K destKey);

这俩方法刚好和上面2个方法相反,这个是交集。把交集的结果放到destKey中

 

7、

Cursor< TypedTuple< V >> scan(K key, ScanOptions options);

这方法自己用的时候,发现跟interator基本上一样,就是用来遍历这个key的集合里面的所有元素的。

 

 

方法基本上自己都跑过用过,本来想贴上代码,但是真的不是特别喜欢,因为一两句话就能搞定的意思,非要让别人又看一遍源码重新理解一遍,不是特别喜欢。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Python Redis工具类是封装了Redis数据库操作的一组函数或方法,方便开发人员在Python中使用Redis进行数据存储、读取和修改等操作。它可以简化与Redis的交互流程,提高开发效率。 Python Redis工具类通常包含以下功能: 1. 连接Redis数据库:提供连接Redis数据库的方法,包括指定主机名、端口号和认证信息。 2. 数据保存和读取:提供将数据保存到Redis数据库和从数据库中读取数据的方法,支持多种数据类型(如字符串、哈希、列表、集合、有序集合等)。 3. 数据修改和删除:提供更新和删除数据的方法,可以更新单个键值对或批量操作。 4. 事务和管道支持:提供事务和管道操作的方法,可以提高多个Redis命令的执行效率。 5. 分布式锁支持:提供实现分布式锁的方法,用于并发控制和资源竞争场景。 6. 发布订阅功能:提供发布订阅功能的方法,支持在多个客户端之间发布和接收消息。 7. 集群支持:提供连接Redis集群的方法,支持在多个Redis节点之间进行数据分布和负载均衡。 通过使用Python Redis工具类,开发人员可以更方便地操作Redis数据库,无需手动处理与Redis的连接、事务管理和数据格式转换等细节。同时,Python Redis工具类还提供了一些高级功能,如分布式锁和发布订阅等,可以满足不同的业务需求。 总之,Python Redis工具类是一种简化Redis操作的工具,可以提高开发效率和代码可读性,使开发人员能够更好地利用Redis进行数据存储和处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值