Spring Data Redis中如何为ZRANGEBYSCORE指定+inf/-inf边界?
在Spring Data Redis中给ZRANGEBYSCORE指定+inf/-inf的两种方法
其实这个问题的解决方案确实藏得有点隐蔽,不过有两种靠谱的方式可以实现:
方法一:使用Double类型的正负无穷常量
Spring Data Redis的ZSetOperations相关方法(比如rangeByScore)接受double类型参数时,直接传入Double.POSITIVE_INFINITY和Double.NEGATIVE_INFINITY就对应Redis里的+inf和-inf。底层会自动把这两个值转换成Redis能识别的指令参数。
举个代码例子:
// 假设你已经注入了RedisTemplate<String, String> redisTemplate ZSetOperations<String, String> zSetOps = redisTemplate.opsForZSet(); // 获取分数从负无穷到正无穷的所有成员(即整个有序集合) Set<String> allMembers = zSetOps.rangeByScore("your-zset-key", Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY); // 获取分数大于等于10,无上限的成员 Set<String> membersAbove10 = zSetOps.rangeByScore("your-zset-key", 10.0, Double.POSITIVE_INFINITY);
方法二:使用字符串形式的"+inf"/"-inf"
如果你更习惯Redis CLI里的写法,也可以用接受String类型边界的重载方法。这类方法是后来版本新增的,所以文档里没太显眼,只在更新日志里提了。
代码示例:
Set<String> allMembers = zSetOps.rangeByScore("your-zset-key", "-inf", "+inf"); // 还支持带开区间的写法,比如分数大于10(不包含10) Set<String> membersGreaterThan10 = zSetOps.rangeByScore("your-zset-key", "(10", "+inf");
两种方法都能正常工作,看你个人习惯选就行。如果是老版本的Spring Data Redis,可能只有第一种方法可用,第二种是较新版本才支持的。
内容的提问来源于stack exchange,提问作者alex.p
相关产品推荐
相关产品推荐

