Зависит от того, как ты это делаешь. В 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.hton
и IPAddr.ntop
делают так:
packed_ip = ip.split('.').map(&:to_i).pack('C4') # hton
ip = packed_ip.unpack('C4').join('.') # ntop
Тогда есть все, что касается IPv6 и еще много чего, но я думаю, что IPAddr
вас там охватил.