【问题标题】:redis store 128 bit numberredis存储128位数字
【发布时间】:2017-12-21 08:13:49
【问题描述】:

我想有效地搜索 使用 redis 的 IPv6 子网范围

我想将 IPv6 数字地址存储在 redis 中并按范围搜索它们。 这些是 128 位整数,例如:

import ipaddress
int(ipaddress.ip_address(u'113f:a:2:3:4:1::77'))

> 22923991422715307029586104612626104439L

并按范围查询:

ZRANGEBYSCORE numerics <subnet-S-start> <subnet-S-end>

但是,redis sorted-sets 可以保持高达 2^53 的分数,所以我所有的大整数都被修剪并且我正在失去精度。

有没有办法在redis中保存这么大的数字而不会丢失精度?

你有更好的建议吗? 谢谢

【问题讨论】:

  • 您可能希望将该数字转换为字节数组并保存
  • Redis 可能不是适合这项工作的工具。例如,Postgres 对 IPv4 和 IPv6 数据类型具有强大的原生支持。
  • @tadman redis 非常适合这种情况,但像往常一样使用 redis 需要做一些工作。

标签: redis ipv6 subnet int128


【解决方案1】:

您可以使用词法范围 API,它会完全适合您。 https://redis.io/commands/zrangebylex

插入得分为 0 的地址,我什至认为您不需要将它们编码为数字,只需填充各个字节,您应该能够查询范围。

【讨论】:

  • 对于一些答案,比如上面的,我希望得到不止一个赞:)
  • @Not_a_Golfer 你能详细说明一下吗?我正在尝试实现类似的东西,但遇到的麻烦比预期的要多。
猜你喜欢
  • 2019-07-04
  • 1970-01-01
  • 2011-05-25
  • 1970-01-01
  • 1970-01-01
  • 2021-12-04
  • 1970-01-01
  • 2023-02-16
  • 2013-05-05
相关资源
最近更新 更多