我正在尝试使用redis精确创建记分板。但这完全取决于精确度。
e.g
127.0.0.1:6379> zadd leaderboard 30.1441050792000 "item"
(integer) 1
127.0.0.1:6379> zrevrange leaderboard 0 -1 withscores
1) "item"
2) "30.144105079199999"
有没有办法保留redis中的精度来存储准确的结果。
由于
答案 0 :(得分:4)
根据文档
Redis排序集使用双64位浮点数 代表得分。在我们支持的所有架构中,这是 表示为IEEE 754浮点数
因此,如果您需要那么多精度,您可以存储0 - 2 ^ 53范围内的整数。然后,当您读取数据时,您可以除以乘数。
示例:
127.0.0.1:6379> zadd leaderboard 301441050792000 item
(integer) 1
127.0.0.1:6379> zrevrange leaderboard 0 -1 WITHSCORES
1) "item"
2) "301441050792000"
然后你除以1e13。
注意强>
这将使用的最大值是900.7199254740992。之后你会超过53位并最终失去精确度。