技术分享

redis的opsForZset整理(队列)

2019-10-30  本文已影响0人  星可码农

redis的opsForZset整理(队列)

1.有训队列的添加

Boolean add(K key, V value, double score);

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

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

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

正序和倒叙的获取方式:
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个这个。

2.队列中数据的条件查询

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

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

应用:可用于模拟交易符合价格的订单查询,然后进行成交处理

3.队列中相同中去重

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 unionAndStore = opsForZSet.unionAndStore("a", Arrays.asList("b","c"), "d");

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

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

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

上一篇 下一篇

猜你喜欢

热点阅读