Redis 不保留排序集中的精度

标签 redis

我正在尝试使用 redis 精确创建记分牌。但它是四舍五入的精度。

例如

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中的精度来存储准确的结果。

谢谢

最佳答案

根据文档

Redis sorted sets use a double 64-bit floating point number to represent the score. In all the architectures we support, this is represented as an IEEE 754 floating point number

因此,如果您需要那么高的精度,您可以存储 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 位并以丢失的精度结束。

关于Redis 不保留排序集中的精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33384297/

相关文章:

ruby-on-rails - 如何使用 Foreman 正确关闭和转储 Redis 服务器?

ruby-on-rails - Rails 服务器在 rake 任务中不以 web 套接字和 redis 选项启动。

redis - LogStash 何时会超过队列容量并丢弃消息?

redis - 创建单个 Redis 实例前的注意事项

php - 在 php 循环中将数据写入 redis 时发生了有趣的事情

javascript - 将 Typescript 代码转换为 Javascript 代码?

apache-spark - 具有大量流和模型的 Spark Streaming 用于 RDD 的分析处理

redis - 对 redis 的可能的安全攻击

php - Laravel 使用管道从 Redis 集访问数据

postgresql - 将 Postgis SRID 与 Redis 的球形模型相匹配?