2017-07-16 77 views
0

我想高效地使用redis搜索IPv6子网范围。redis商店128位数

我想存储在redis中的IPv6数字地址,并按范围搜索它们。 那些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的分拣集可以容纳2^53的得分,因此我所有的大额整数都被削减,并且我失去了精确度。

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

你有更好的建议吗? 谢谢

+1

您可能希望将该数字转换为字节数组并将其保存,而不是 – Guilherme

+0

Redis可能不是该作业的正确工具。作为一个例子,Postgres对IPv4和IPv6数据类型有强大的本地支持。 – tadman

+0

@tadman redis对此非常理想,但像往常一样,使用redis需要一点点工作。 –

回答

3

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

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

+0

对于上面的一些答案,我想有多个upvote给:) –