RedisTemplate之opsForZSet()

前言

可閱讀這篇文章瞭解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));
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章