redis - 具有正无穷大值的 SortedSetRangeByScoreWithScores 问题

标签 redis stackexchange.redis

当 Redis Sorted Set 有一个得分为 +Infinity 的项目时,尝试获取其得分会返回 double.NaN 而不是 double.PositiveInfinity

SortedSetRangeByScoreWithScoresSortedSetRangeByRankWithScores 方法都会发生这种情况。

注意最后一个断言失败了:

var cnn = ConnectionMultiplexer.Connect("...");
var db = cnn.GetDatabase();
db.SortedSetAdd("key", "first", double.NegativeInfinity);
db.SortedSetAdd("key", "last", double.PositiveInfinity);
var result = db.SortedSetRangeByScoreWithScores("key", double.NegativeInfinity, double.PositiveInfinity);
Assert.AreEqual(double.NegativeInfinity, result[0].Score);
Assert.AreEqual(double.PositiveInfinity, result[1].Score);  // <-- This assert fails

Locals

这是通过 redis-cli 的结果:

enter image description here

引用 StackExchange.Redis 问题 #287

最佳答案

我认为问题在于 double.PositiveInfinity 字符串值在 Redis 服务器上是 inf 但在客户端上是 +inf

查看此文件:

StackExchange.Redis/StackExchange/Redis/Format.cs

线条

68: if (double.IsPositiveInfinity(value)) return "+inf";
147: if(string.Equals("+inf", s, StringComparison.OrdinalIgnoreCase))

尝试将这些字符串设置为 "inf" 而不是 "+inf" 并运行更新后的客户端。

关于redis - 具有正无穷大值的 SortedSetRangeByScoreWithScores 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32956277/

相关文章:

caching - 将 Azure Redis 缓存设置为 LRU

azure - StackExchange.Redis 和 StackExchange.Redis.StrongName 之间有什么区别?

javascript - 简单节点/Express 应用程序无法识别 session 存储

python-3.x - 如何修复 : ERR Protocol error: expected '$' , 得到 ' '

javascript - Redis/Node.js - 2 个客户端(1 个发布/订阅)导致写入问题

redis - 从有序集合中删除元素 - ZREM

stackexchange.redis - StackExchange Redis 连接配置是否已更改?

.net 4.5.1 [.net core (dnx)] 的缓存框架

redis - 始终在同一位置从 Redis 缓存中检索时出现超时异常

c# - 为什么在同一个实例中使用多个数据库在 Redis 中不是一个好主意?