当 Redis Sorted Set 有一个得分为 +Infinity 的项目时,尝试获取其得分会返回 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 - 具有正无穷大值的 SortedSetRangeByScoreWithScores 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32956277/