redis的opsForZset整理(隊列)
1.有訓隊列的添加
Boolean add(K key, V value, double score);
key就是這個有序隊列的key摆寄,
value表示一個你需要排序附帶的值嘿期,比如你可以放一個用戶的ID或者其他的高每。
Score表示一個分數(shù)嗡午,所有的排序都是基于這個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,有時候業(yè)務(wù)需要輸出這個score督赤,比如排行榜的分數(shù),你就可以用2個這個泻蚊。
2.隊列中數(shù)據(jù)的條件查詢
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);
這兩個方法挺有意思的,意思不僅僅是去重性雄,而且會把重復的數(shù)據(jù)score進行相加没卸,返回值是這個集合的長度
先解釋第一個,key秒旋,otherKey這兩個key的有序隊列進行相加约计,如果兩個隊列中存在相同的value,就將value的score相加迁筛,最終將最后的組合結(jié)果放到destKey中煤蚌。
第二個方法則是多了一個集合參數(shù),多個集合可以用同一個方法,節(jié)省代碼尉桩,舉個簡單的例子:
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個方法相反筒占,這個是交集。把交集的結(jié)果放到destKey中