【问题标题】:SortedSetRangeByScoreWithScores issue with positive infinity values正无穷大值的 SortedSetRangeByScoreWithScores 问题
【发布时间】:2015-10-12 06:14:51
【问题描述】:

当 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

这是通过 redis-cli 得到的结果:

参考 StackExchange.Redis 问题#287

【问题讨论】:

    标签: redis stackexchange.redis


    【解决方案1】:

    我认为问题在于 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" 并运行更新的客户端。

    【讨论】:

    • 我的猜测是一样的,但没有找到它的定义位置。谢谢你的帮助!
    • @thepirat000 www.beyondgrep.com 有ack,搜索源代码的好工具!我也用过。
    猜你喜欢
    • 2022-08-12
    • 2017-08-19
    • 2017-11-03
    • 1970-01-01
    • 2015-03-22
    • 2010-11-03
    • 2016-09-22
    • 1970-01-01
    • 2012-02-09
    相关资源
    最近更新 更多