当前位置:  开发笔记 > 后端 > 正文

Redis:我应该将IP转换为整数吗?

如何解决《Redis:我应该将IP转换为整数吗?》经验,为你挑选了1个好方法。

我需要在redis哈希中存储IP地址.

如果IP存储为整数而不是字符串,是否会节省大量内存?

我将使用Ruby IPAddr将IP转换为int.



1> Theo..:

这取决于你是如何做到的.在Redis中,键和(叶)值是字符串.如果你将IP地址转换为int并将其发送到Redis,就像下面的代码一样,你不会节省太多:

redis.hset("xyz", "ip", IPAddr.new(ip).to_i)

例如,IP"255.255.255.255"是点状四边形的15字节,其整数表示"4294967295"在保存为字符串时是十个字节,这就是上面的代码所做的.

要减少存储在Redis中的四个字节,您必须发送原始字节"\ xFF\xFF\xFF\xFF".

在Ruby中你会这样做:

packed_ip = IPAddr.new(ip).hton
redis.hset("xyz", "ip", packed_ip)

然后当你读回来

packed_ip = redis.hget("xyz", "ip")
ip = IPAddr.ntop(packed_ip)

什么IPAddr.htonIPAddr.ntop做的是这样的:

packed_ip = ip.split('.').map(&:to_i).pack('C4') # hton
ip = packed_ip.unpack('C4').join('.') # ntop

然后就是关于IPv6的全部内容以及诸如此类的东西,但我认为IPAddr你已经覆盖了那里.

推荐阅读
kikokikolove
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有