Redis不保留排序集的精度

时间:2015-10-28 06:27:44

标签: redis

我正在尝试使用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中的精度来存储准确的结果。

由于

1 个答案:

答案 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位并最终失去精确度。