2017-07-16 83 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給:) –