【发布时间】: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 需要做一些工作。