redis的opsForZset整理(队列)
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中