具有正无穷大值的 SortedSetRangeByScoreWithScores 问题
SortedSetRangeByScoreWithScores issue with positive infinity values
当 Redis Sorted Set 具有 +Infinity 分数的项目时,尝试获取其分数 returns double.NaN
而不是 double.PositiveInfinity
.
SortedSetRangeByScoreWithScores
和 SortedSetRangeByRankWithScores
方法都会发生这种情况。
注意最后一个断言失败:
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
这是通过redis-cli的结果:
参考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 Sorted Set 具有 +Infinity 分数的项目时,尝试获取其分数 returns double.NaN
而不是 double.PositiveInfinity
.
SortedSetRangeByScoreWithScores
和 SortedSetRangeByRankWithScores
方法都会发生这种情况。
注意最后一个断言失败:
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
这是通过redis-cli的结果:
参考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"
和 运行 更新后的客户端。