redis存储128位数

时间:2017-07-16 20:59:08

标签: redis ipv6 subnet int128

我想使用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>

HOWEVER ,redis排序集可以保持最高2 ^ 53的分数,所以我的所有大整数都被修剪掉了,我的精度也在下降。

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

你有更好的建议吗? 感谢

1 个答案:

答案 0 :(得分:4)

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

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