Redis 排序集中的大数

问题描述

我想将值作为分数存储在一个 redis 排序集中,最大为 10^24(如果可能的话,甚至是 2^256)

ZRANGE 的整数大小限制是多少?

在某些情况下,我正在尝试对自定义以太坊令牌的顶级持有者进行排名。例如https://etherscan.io/token/0xdac17f958d2ee523a2206206994597c13d831ec7#balances

我想将余额保存在 Redis 数据库中并通过 node.js 访问它。我可以使用 web3 检索实际余额,以防数据库崩溃或其他原因。关键是我希望对数据进行排序,并且希望能够以极快的速度访问数据。

解决方法

Redis 文档中关于有序集的引用:

Range of integer scores that can be expressed precisely

Redis 排序集使用双 64 位浮点数表示分数。在我们支持的所有架构中,这表示为 IEEE 754 浮点数,它能够精确表示 -(2^53) 和 +(2^53) 之间的整数。在更实际的术语中,-9007199254740992 和 9007199254740992 之间的所有整数都可以完美表示。 较大的整数或分数在内部以指数形式表示,因此您可能只得到十进制数的近似值,或设置为分数的非常大的整数。 >

因此,当离开精确范围并且分数的近似值足以满足您的用例时,wikipedia says 2^1023 将是可能的最高指数。