前言
可閱讀這篇文章瞭解Spring Boot Redis的基本操作!
ZSetOperations
使用ZSetOperations可以進行Redis的zset集合操作。
@Autowired
private StringRedisTemplate stringRedisTemplate;
private ZSetOperations zsetVo;
@Test
void zsetOperations() {
zSetVo = stringRedisTemplate.opsForZSet();
zsetVo.add("zsetKey", "I", 9.0);
zsetVo.add("zsetKey", "I", 10.0);
log.debug("獲得zset集合第一個元素:{}",zsetVo.range("zsetKey",0,0));
}
ZSetOperations中的方法
方法 | 返回值 | 描述 |
---|---|---|
1.add(K key, V value, double score) | Boolean | 添加元素到變量中同時指定元素的分值。 |
2.add(K key, Set<TypedTuple<V>> tuples) | Long | 通過TypedTuple方式新增數據。 |
3.range(K key, long start, long end) | Set<V> | 獲取變量指定區間的元素。 |
4.rangeByLex(K key, RedisZSetCommands.Range range) | Set<V> | 用於獲取滿足非score的排序取值。這個排序只有在有相同分數的情況下才能使用,如果有不同的分數則返回值不確定。 |
5. rangeByLex(K key, RedisZSetCommands.Range range, RedisZSetCommands.Limit limit) | Set<V> | 用於獲取滿足非score的設置下標開始的長度排序取值。 |
6.rangeByScore(K key, double min, double max) | Set<V> | 根據設置的score獲取區間值。 |
7.rangeByScore(K key, double min, double max,long offset, long count) | Set<V> | 根據設置的score獲取區間值從給定下標和給定長度獲取最終值。 |
8.rangeWithScores(K key, long start, long end) | Set<ZSetOperations.TypedTuple<V>> | 獲取RedisZSetCommands.Tuples的區間值。 |
9.rangeByScoreWithScores(K key, double min, double max) | Set<ZSetOperations.TypedTuple<V>> | 獲取RedisZSetCommands.Tuples的區間值通過分值。 |
10.rangeByScoreWithScores(K key, double min, double max, long offset, long count) | Set<ZSetOperations.TypedTuple<V>> | 獲取RedisZSetCommands.Tuples的區間值從給定下標和給定長度獲取最終值通過分值。 |
11.count(K key, double min, double max) | Long | 獲取區間值的個數。 |
12.rank(K key, Object o) | Long | 獲取變量中元素的索引,下標開始位置爲0。 |
13.scan(K key, ScanOptions options) | Cursor<ZSetOperations.TypedTuple<V>> | 匹配獲取鍵值對,ScanOptions.NONE爲獲取全部鍵值對;ScanOptions.scanOptions().match(“C”).build()匹配獲取鍵位map1的鍵值對,不能模糊匹配。 |
14.score(K key, Object o) | Double | 獲取元素的分值。 |
15.zCard(K key) | Long | 獲取變量中元素的個數。 |
16.incrementScore(K key, V value, double delta) | Double | 修改變量中的元素的分值爲:score+delta。 |
17.reverseRange(K key, long start, long end) | Set<V> | 先倒序排列在獲取指定區間元素。 |
18.reverseRangeByScore(K key, double min, double max) | Set<V> | 倒序排列指定分值區間元素。 |
19.reverseRangeByScore(K key, double min, double max, long offset, long count) | Set<V> | 倒序排列從給定下標和給定長度分值區間元素。 |
20. reverseRangeByScoreWithScores(K key, double min, double max) | Set<ZSetOperations.TypedTuple<V>> | 倒序排序獲取RedisZSetCommands.Tuples的分值區間值。 |
21.reverseRangeByScoreWithScores(K key, double min, double max, long offset, long count) | Set<ZSetOperations.TypedTuple<V>> | 倒序排序獲取RedisZSetCommands.Tuples的從給定下標和給定長度分值區間值。 |
22.reverseRangeWithScores(K key, long start, long end) | Set<ZSetOperations.TypedTuple<V>> | 索引倒序排列區間值。 |
23.reverseRank(K key, Object o) | Long | 獲取倒序排列的索引值。 |
24.intersectAndStore(K key, K otherKey, K destKey) | Long | 獲取2個變量的交集存放到第3個變量裏面。 |
25.intersectAndStore(K key, Collection otherKeys, K destKey) | Long | 獲取多個變量的交集存放到第3個變量裏面。 |
26.unionAndStore(K key, K otherKey, K destKey) | Long | 獲取2個變量的合集存放到第3個變量裏面。 |
27.unionAndStore(K key, Collection otherKeys, K destKey) | Long | 獲取多個變量的合集存放到第3個變量裏面。 |
28.remove(K key, Object… values) | Long | 批量移除元素根據元素值。 |
29.removeRangeByScore(K key, double min, double max) | Long | 根據分值移除區間元素。 |
30.removeRange(K key, long start, long end) | Long | 根據索引值移除區間元素。 |
1.add(K key, V value, double score)
添加元素到變量中同時指定元素的分值。
log.debug("第一次添加是否成功flag:{}", zsetVo.add("key", "I", 9.0));
log.debug("第二次添加是否成功flag:{}", zsetVo.add("key", "I", 9.0));
2.add(K key, Set<TypedTuple> tuples)
通過TypedTuple方式新增數據。
Set<ZSetOperations.TypedTuple<String>> set = new HashSet<>();
set.add(new DefaultTypedTuple<>("E", 6.0));
set.add(new DefaultTypedTuple<>("F", 7.0));
set.add(new DefaultTypedTuple<>("G", 8.0));
log.debug("key新增{}條數據", zsetVo.add("key", set));
3.range(K key, long start, long end)
獲取變量指定區間的元素。
log.debug("獲取排名2-4的元素:{}",zsetVo.range("key",1,3));
如:A B C D E
則:得到 B C D
4.rangeByLex(K key, RedisZSetCommands.Range range)
用於獲取滿足非score的排序取值。這個排序只有在有相同分數的情況下才能使用,如果有不同的分數則返回值不確定。
RedisZSetCommands.Range range = new RedisZSetCommands.Range();
range.lt("I");
log.debug("分數小於D的元素:{}", zsetVo.rangeByLex("key", range));
5.rangeByLex(K key, RedisZSetCommands.Range range, RedisZSetCommands.Limit limit)
用於獲取滿足非score的設置下標開始的長度排序取值。
RedisZSetCommands.Range range = new RedisZSetCommands.Range();
range.lt("I");
RedisZSetCommands.Limit limit = new RedisZSetCommands.Limit();
limit.count(3);
//起始下標爲0
limit.offset(1);
log.debug("元素:{}", zsetVo.rangeByLex("key", range, limit));
從第2個元素開始,獲取3個分數小於 I 的元素
如:A B C D E I
則:B C D
6.rangeByScore(K key, double min, double max)
根據設置的score獲取區間值。
log.debug("元素:{}", zsetVo.rangeByScore("key", 5.0, 30));
7.rangeByScore(K key, double min, double max,long offset, long count)
根據設置的score獲取區間值從給定下標和給定長度獲取最終值。
log.debug("元素:{}", zsetVo.rangeByScore("key", 5.0, 30, 1, 3));
在分數在5.0-30的元素中,從第2個開始取出3個。
8.rangeWithScores(K key, long start, long end)
獲取RedisZSetCommands.Tuples的區間值。
log.debug("元素:{}", zsetVo.rangeWithScores("key", 1, 3).stream().map(ZSetOperations.TypedTuple::getValue).collect(Collectors.toList()));
log.debug("分數:{}", zsetVo.rangeWithScores("key", 2, 3).stream().map(ZSetOperations.TypedTuple::getScore).collect(Collectors.toList()));
第1個元素開始,抽取3個元素。
第2個元素開始,抽取3個分數。
因爲返回值是Set集合,輸出使用了流操作轉換爲string對象集合輸出。
9.rangeByScoreWithScores(K key, double min, double max)
獲取RedisZSetCommands.Tuples的區間值通過分值。
log.debug("元素:{}",zsetVo.rangeByScoreWithScores("key", 7.0, 80).stream().map(ZSetOperations.TypedTuple::getValue).collect(Collectors.toList()));
log.debug("分數:{}",zsetVo.rangeByScoreWithScores("key", 8.0, 90).stream().map(ZSetOperations.TypedTuple::getScore).collect(Collectors.toList()));
獲取分數在7~80的元素。
獲取分數在8.0~90的分數。
因爲返回值是Set集合,輸出使用了流操作轉換爲string對象集合輸出。
10.rangeByScoreWithScores(K key, double min, double max, long offset, long count)
獲取RedisZSetCommands.Tuples的區間值從給定下標和給定長度獲取最終值通過分值。
log.debug("元素:{}",zsetVo.rangeByScoreWithScores("key",5.0,80,2,3).stream().map(ZSetOperations.TypedTuple::getValue).collect(Collectors.toList()));
log.debug("分數:{}",zsetVo.rangeByScoreWithScores("key",5.0,80,2,3).stream().map(ZSetOperations.TypedTuple::getScore).collect(Collectors.toList()));
分數在5.0~80的元素,從第3個開始獲取3個元素。
分數在5.0~80的元素,從第3個開始獲取3個分數。
因爲返回值是Set集合,輸出使用了流操作轉換爲string對象集合輸出。
11.count(K key, double min, double max)
獲取區間值的個數。
log.debug("元素數量:{}", zsetVo.count("key", 5.0, 88));
12.rank(K key, Object o)
獲取變量中元素的索引,下標開始位置爲0。
log.debug("元素G的下標爲:{}",zsetVo.rank("key","G"));
13.scan(K key, ScanOptions options)
匹配獲取鍵值對,ScanOptions.NONE爲獲取全部鍵值對;ScanOptions.scanOptions().match(“C”).build()匹配獲取鍵位map1的鍵值對,不能模糊匹配。
Cursor<ZSetOperations.TypedTuple<String>> cursor = zsetVo.scan("key", ScanOptions.NONE);
while (cursor.hasNext()){
ZSetOperations.TypedTuple<String> tuple = cursor.next();
log.debug("元素:{},分數:{}", tuple.getValue(),tuple.getScore());
}
14.score(K key, Object o)
獲取元素的分值。
log.debug("分數:{}",zsetVo.score("key","I"));
15.zCard(K key)
獲取變量中元素的個數。
log.debug("獲取key裏面元素的個數爲:{}",zsetVo.zCard("key"));
16.incrementScore(K key, V value, double delta)
修改變量中的元素的分值爲:score+delta。
log.debug("元素I加99.9,修改後的分數爲:{}",zsetVo.incrementScore("key","I",99.9));
log.debug("元素I加-99.9,修改後的分數爲:{}",zsetVo.incrementScore("key","I",-99.9));
17.reverseRange(K key, long start, long end)
先倒序排列在獲取指定區間元素。倒序排列指定分值區間元素。
log.debug("元素:{}",zsetVo.reverseRange("key",2,5));
18.reverseRangeByScore(K key, double min, double max)
倒序排列指定分值區間元素。
log.debug("元素:{}",zsetVo.reverseRangeByScore("key",6.0,77));
19.reverseRangeByScore(K key, double min, double max, long offset, long count)
倒序排列從給定下標和給定長度分值區間元素。
log.debug("元素:{}",zsetVo.reverseRangeByScore("key",7.0,77,2,3));
20.reverseRangeByScoreWithScores(K key, double min, double max)
倒序排序獲取RedisZSetCommands.Tuples的分值區間值。
log.debug("分數:{}",zsetVo.reverseRangeByScoreWithScores("key",7.0,77).stream().map(ZSetOperations.TypedTuple::getScore).collect(Collectors.toList()));
log.debug("元素:{}",zsetVo.reverseRangeByScoreWithScores("key",7.0,77).stream().map(ZSetOperations.TypedTuple::getValue).collect(Collectors.toList()));
因爲返回值是Set集合,輸出使用了流操作轉換爲string對象集合輸出。
21.reverseRangeByScoreWithScores(K key, double min, double max, long offset, long count)
倒序排序獲取RedisZSetCommands.Tuples的從給定下標和給定長度分值區間值。
log.debug("元素:{}",zsetVo.reverseRangeByScoreWithScores("key",7.0,77,2,3).stream().map(ZSetOperations.TypedTuple::getValue).collect(Collectors.toList()));
log.debug("分數:{}",zsetVo.reverseRangeByScoreWithScores("key",7.0,77,2,3).stream().map(ZSetOperations.TypedTuple::getScore).collect(Collectors.toList()));
因爲返回值是Set集合,輸出使用了流操作轉換爲string對象集合輸出。
22.reverseRangeWithScores(K key, long start, long end)
索引倒序排列區間值。
log.debug("分數:{}",zsetVo.reverseRangeWithScores("key",1,3).stream().map(ZSetOperations.TypedTuple::getScore).collect(Collectors.toList()));
log.debug("元素:{}",zsetVo.reverseRangeWithScores("key",1,3).stream().map(ZSetOperations.TypedTuple::getValue).collect(Collectors.toList()));
因爲返回值是Set集合,輸出使用了流操作轉換爲string對象集合輸出。
23.reverseRank(K key, Object o)
獲取倒序排列的索引值。
log.debug("索引值:{}",zsetVo.reverseRank("key","I"));
24.intersectAndStore(K key, K otherKey, K destKey)
獲取2個變量的交集存放到第3個變量裏面。
zsetVo.incrementScore("key1","C",99.5);
zsetVo.incrementScore("key1","D",87.5);
zsetVo.incrementScore("key1","R",47.5);
zsetVo.incrementScore("key1","A",47.5);
log.debug("key和key1交集元素個數:{}",zsetVo.intersectAndStore("key","key1","key2"));
25.intersectAndStore(K key, Collection otherKeys, K destKey)
獲取多個變量的交集存放到第3個變量裏面。
log.debug("key和list裏的key交集元素個數:{}",zsetVo.intersectAndStore("key", Arrays.asList("key1","key2"),"key3"));
26.unionAndStore(K key, K otherKey, K destKey)
獲取2個變量的合集存放到第3個變量裏面。
log.debug("key1與key2的合集元素個數:{}",zsetVo.unionAndStore("key","key1","key4"));
27.unionAndStore(K key, Collection otherKeys, K destKey)
獲取多個變量的合集存放到第3個變量裏面。
log.debug("key1與list裏的key的合集元素個數:{}",zsetVo.unionAndStore("key", Arrays.asList("key1","key2","key3","key4"),"key5"));
28.remove(K key, Object… values)
批量移除元素根據元素值。
log.debug("移除成功的元素總數:{}個",zsetVo.remove("key5","A","B","C"));
29.removeRangeByScore(K key, double min, double max)
根據分值移除區間元素。
log.debug("移除成功的元素總數:{}個", zsetVo.removeRangeByScore("key5", 7.0, 66));
30.removeRange(K key, long start, long end)
根據索引值移除區間元素。
log.debug("移除排名成功的元素總數:{}個", zsetVo.removeRange("key4", 2,5));