当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
答案 0 :(得分:1)
我认为问题是Redis服务器上的double.PositiveInfinity
字符串值为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"
并运行更新的客户端。