RedisTemplate常用集合使用说明-boundZSetOps(十一)

本文介绍Redis中ZSet数据结构的操作方法,包括添加元素、获取区间值、统计分数区间内的元素数量等20余种操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先要定义一个BoundZSetOperations

Java代码 

 收藏代码

  1. BoundZSetOperations boundZSetOperations = redisTemplate.boundZSetOps("bzso");  

 1.add(V value, double score)

     绑定键中添加值,同时指定值的分数

Java代码 

 收藏代码

  1. boundZSetOperations.add("a",1);  
  2. boundZSetOperations.add("b",2);  

 2.range(long start, long end)

    获取绑定键的指定区间值

Java代码 

 收藏代码

  1. //集合中的值  
  2. boundZSetOperations.range(0,-1).forEach(v -> System.out.println("集合中的值:" + v));  

 3.count(double min, double max)

     获取从指定位置开始(起始下标不再为0),到结束位置位置的值个数

Java代码 

 收藏代码

  1. //获取从指定位置开始(下标起始坐标为1)到结束位置为止的值个数  
  2. System.out.println("获取从指定位置开始(下标起始坐标为1)到结束位置为止的值个数:" + boundZSetOperations.count(1,2));  

 4.add(Set<ZSetOperations.TypedTuple<V>> tuples)

    以TypedTuple的方式新增值

Java代码 

 收藏代码

  1. //通过TypedTuple方式新增数据  
  2. ZSetOperations.TypedTuple<Object> typedTuple1 = new DefaultTypedTuple<Object>("E",6.0);  
  3. ZSetOperations.TypedTuple<Object> typedTuple2 = new DefaultTypedTuple<Object>("F",7.0);  
  4. ZSetOperations.TypedTuple<Object> typedTuple3 = new DefaultTypedTuple<Object>("G",5.0);  
  5. Set<ZSetOperations.TypedTuple<Object>> typedTupleSet = new HashSet<ZSetOperations.TypedTuple<Object>>();  
  6. typedTupleSet.add(typedTuple1);  
  7. typedTupleSet.add(typedTuple2);  
  8. typedTupleSet.add(typedTuple3);  
  9. boundZSetOperations.add(typedTupleSet);  
  10. boundZSetOperations.range(0,-1).forEach(v -> System.out.println("通过TypedTuple方式新增数据:" + v));  

 5.incrementScore(V value, double delta)

    自增长指定键的分数

Java代码 

 收藏代码

  1. //自增长后的数据  
  2. boundZSetOperations.incrementScore("a",1);  
  3. boundZSetOperations.range(0,-1).forEach(v -> System.out.println("自增长后的数据:" + v));  

 6.intersectAndStore(Collection<K> otherKeys, K destKey)和intersectAndStore(K otherKey, K destKey)

     比较特定键中相同的值并存储

Java代码 

 收藏代码

  1. //获取相同值,并存储  
  2. boundZSetOperations.intersectAndStore("bzso1","bzso2");  
  3. redisTemplate.opsForZSet().range("bzso2",0,-1).forEach(v -> System.out.println("获取相同值,并存储" + v));  

7.scan(ScanOptions options)

     匹配获取键值对,ScanOptions.NONE为获取全部键值对;ScanOptions.scanOptions().match("C").build()匹配获取键位map1的键值对,不能模糊匹配。

Java代码 

 收藏代码

  1. Cursor<ZSetOperations.TypedTuple> cursor = boundZSetOperations.scan(ScanOptions.NONE);  
  2. while (cursor.hasNext()){  
  3.       ZSetOperations.TypedTuple typedTuple = cursor.next();  
  4.       System.out.println("扫描绑定数据:" + typedTuple.getValue() + "--->" + typedTuple.getScore());  
  5. }  

 8.rangeByLex(RedisZSetCommands.Range range)

     根据Range排序区间获取值

Java代码 

 收藏代码

  1. //按照值来排序的取值,这个排序只有在有相同分数的情况下才能使用,如果有不同的分数则返回值不确定  
  2. RedisZSetCommands.Range range = new RedisZSetCommands.Range();  
  3. range.lte("b");  
  4. //range.gte("F");  
  5. boundZSetOperations.rangeByLex(range).forEach(v -> System.out.println("按照值来排序的取值:" + v));  

9.rangeByLex(RedisZSetCommands.Range range, RedisZSetCommands.Limit limit)

     根据Range排序区间和Limit设置的下标及设置的长度获取值

Java代码 

 收藏代码

  1. //获取从设置下标开始的设置长度的元素值  
  2. RedisZSetCommands.Limit limit = new RedisZSetCommands.Limit();  
  3. limit.count(2);  
  4. //起始下标为0  
  5. limit.offset(1);  
  6. boundZSetOperations.rangeByLex(range,limit).forEach(v -> System.out.println("按照值来排序的限定取值:" + v));  

10.rangeByScore(double min, double max)

     根据分数区间值排序取值

Java代码 

 收藏代码

  1. //按照分数排序  
  2. boundZSetOperations.rangeByScore(3,7).forEach(v -> System.out.println("按照分数排序:" + v));  

11.rangeWithScores(long start, long end)

    按照位置排序对指定区间取值和分数

Java代码 

 收藏代码

  1. //按照位置排序取值和分数  
  2. Set<ZSetOperations.TypedTuple> tupleSet = boundZSetOperations.rangeWithScores(3,5);  
  3. tupleSet.forEach(v -> System.out.printf("按照位置排序取值和分数:%s-->%s\n",v.getValue(),v.getScore()));  

12.rangeByScoreWithScores(double min, double max) 

    按照分数排序对指定区间取值和分数

Java代码 

 收藏代码

  1. //按照分数位置排序取值和分数  
  2. Set<ZSetOperations.TypedTuple> scoreSet = boundZSetOperations.rangeByScoreWithScores(1,5);  
  3. scoreSet.forEach(v -> System.out.printf("按照分数位置排序取值和分数:%s-->%s\n",v.getValue(),v.getScore()));  

13.reverseRange(long start, long end) 

      倒序排序获取指定区间的值

Java代码 

 收藏代码

  1. //按照值来倒序取值  
  2. boundZSetOperations.reverseRange(0,3).forEach(v -> System.out.println("按照值来倒序取值:" + v));  

 14.reverseRangeByScore(double min, double max)

     按照分数倒序排序获取区间取值

Java代码 

 收藏代码

  1. //按照分数来倒序取值  
  2. boundZSetOperations.reverseRangeByScore(2,5).forEach(v -> System.out.println("按照分数来倒序取值:" + v));  

 15.reverseRangeWithScores(long start, long end)

     倒序排序获取指定区间的值和分数

Java代码 

 收藏代码

  1. //按照位置倒序取值和分数  
  2. tupleSet = boundZSetOperations.reverseRangeWithScores(2,5);  
  3. tupleSet.forEach(v -> System.out.printf("按照位置倒序取值和分数:%s-->%s\n",v.getValue(),v.getScore()));  

16. reverseRangeByScoreWithScores(double min, double max)

       按照分数倒序排序获取指定区间的值和分数

Java代码 

 收藏代码

  1. //按照分数位置倒序取值和分数  
  2. scoreSet = boundZSetOperations.reverseRangeByScoreWithScores(2,5);  
  3. scoreSet.forEach(v -> System.out.printf("按照分数位置倒序取值和分数:%s-->%s\n",v.getValue(),v.getScore()));  

 17.count(double min, double max)

     统计分数在某个区间的个数

Java代码 

 收藏代码

  1. //统计分数在某个区间的个数  
  2. System.out.println("统计分数在某个区间的个数:" + boundZSetOperations.count(2,5));  

18.rank(Object o) 

      获取绑定键中的元素的下标

Java代码 

 收藏代码

  1. //获取变量中元素的索引,下标开始位置为0  
  2. System.out.println("获取变量中元素的索引:" + boundZSetOperations.rank("b"));  

 19.score(Object o)

     获取绑定键中元素的分数

Java代码 

 收藏代码

  1. System.out.println("获取变量中元素的分数:" + boundZSetOperations.score("b"));  

20. zCard()

       获取绑定键中元素的个数

Java代码 

 收藏代码

  1. //获取变量中元素的个数  
  2. System.out.println("获取变量中元素的个数:" + boundZSetOperations.zCard());  

 21.intersectAndStore(Collection<K> otherKeys, K destKey)和intersectAndStore(K otherKey, K destKey)

     比较相同的值并存储

Java代码 

 收藏代码

  1. //intersectAndStore后的数据  
  2. boundZSetOperations.intersectAndStore("abc","bac");  
  3. redisTemplate.opsForSet().members("bac").forEach(v -> System.out.println("intersectAndStore后的数据:" + v));  
  4.   
  5. //intersectAndStore集合后的数据  
  6. List list = new ArrayList<>(Arrays.asList("abc","acb"));  
  7. boundZSetOperations.intersectAndStore(list,"bac");  
  8. redisTemplate.opsForSet().members("bac").forEach(v -> System.out.println("intersectAndStore集合后的数据:" + v));  

22.unionAndStore(Collection<K> otherKeys, K destKey)和unionAndStore(K otherKey, K destKey)

    合并所有的值并存储

Java代码 

 收藏代码

  1. //unionAndStore后的数据  
  2. boundZSetOperations.unionAndStore("abc","bca");  
  3. redisTemplate.opsForZSet().range("bca",0,-1).forEach(v -> System.out.println("unionAndStore后的数据:" + v));  
  4.   
  5. //unionAndStore集合后的数据  
  6. boundZSetOperations.unionAndStore(list,"bca");  
  7. redisTemplate.opsForZSet().range("bca",0,-1).forEach(v -> System.out.println("unionAndStore集合后的数据:" + v));  

23.remove(Object... values) 

     按值批量删除绑定键中的元素

Java代码 

 收藏代码

  1. //移除给定值中的变量  
  2. long removeCount = boundZSetOperations.remove("a","b");  
  3. System.out.println("移除给定值中的变量个数:" + removeCount);  
  4. boundZSetOperations.range(0,-1).forEach(v -> System.out.println("移除给定值中的变量后剩余的值:" + v));  

23.removeRange(long start, long end)

     删除绑定键中按值排序的区间的值

Java代码 

 收藏代码

  1. /移除区间值的变量  
  2. boundZSetOperations.removeRange(2,3);  
  3. boundZSetOperations.range(0,-1).forEach(v -> System.out.println("移除区间值的变量后剩余的值:" + v));  

24.removeRangeByScore(double min, double max)

     按照分数排序删除区间的值

Java代码 

 收藏代码

  1. //移除分数区间值的变量  
  2. boundZSetOperations.removeRangeByScore(3,5);  
  3. boundZSetOperations.range(0,-1).forEach(v -> System.out.println("移除分数区间值的变量后剩余的值:" + v));  
### 关于 `opsForZSet` 的使用说明 在 Spring Data Redis 中,`RedisTemplate` 提供了一个专门用于操作有序集合(Sorted Set)的方法——`opsForZSet()`。此方法返回一个 `BoundZSetOperations<K,V>` 对象,允许开发者执行与 Redis Sorted Set 数据结构相关的各种操作。 以下是 `opsForZSet` 常见的操作及其示例: #### 添加元素到 ZSet 通过调用 `add(key, value, score)` 方法可以向指定的键对应的 ZSet 中添加成员,并为其分配分数。 ```java import org.springframework.data.redis.core.RedisTemplate; import org.springframework.beans.factory.annotation.Autowired; public class RedisService { @Autowired private RedisTemplate<String, String> redisTemplate; public void addElementToZSet(String key, String member, double score) { redisTemplate.opsForZSet().add(key, member, score); } } ``` 上述代码片段展示了如何将新成员加入到名为 `key` 的 ZSet 中[^5]。 #### 获取排名范围内的元素 可以通过 `range(key, start, end)` 来获取按分值升序排列的部分成员列表。 ```java List<String> range = redisTemplate.opsForZSet().range("myKey", 0, -1); // 返回整个集合中的所有成员 System.out.println(range); ``` #### 删除特定成员 如果要移除某个已存在的成员,则可利用 `remove(key, members...)` 实现这一功能。 ```java Long removedCount = redisTemplate.opsForZSet().remove("myKey", "memberToRemove"); if(removedCount != null && removedCount > 0){ System.out.println("Member successfully deleted."); } else{ System.out.println("No such member found!"); } ``` 以上内容基于官方文档以及实际开发经验总结而来[^2]。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值