如何在Redis中存储键/值对

时间:2017-01-22 05:49:06

标签: redis amazon-elasticache redis-cache

我们使用Elasticache Redis节点来存储数据。

所有按键的格式相同:
- 键是md5哈希 - 128位(16个字节,32个字符串字符) - 值是时间戳字符串 - 19个字节 密钥总大小为32+19=51 bytes

我们有84 917 361百万的钥匙 我假设,Redis shell消耗的总内存接近84917361*51 = 4.03 gb

实际上,它需要11.07 gb 输出info命令: used_memory_human:11.07G

  1. 关于内存剩余部分的内容,7 gb
  2. 有没有办法将md5存储为16个字节的哈希值,而不是包含32个字符的字符串?
  3. 谢谢,非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

  

关于内存的剩余部分,7 gb?

简答: Redis不会将密钥和值存储为原始字符串

事实上,

  1. 密钥被包装成sdshdr结构(对于最新版本,它是一个更紧凑的结构),它有一些开销,例如字符串的长度。

  2. 该值被包装到redisObject结构中,该结构也有一些开销,例如对象编码,refcount。

  3. 当Redis将一对插入dict时,还有其他开销,例如: next结构中的key指针和dictEntry指针。

  4. 所有这些开销都消耗了剩余的内存。

    为了提高内存效率,你可以参考@Kevin Christopher Henry提到的文章(小哈希可以节省大量redisObject开销,并且可以使用ziplist使内存中的元素更紧凑。)

      

    有没有办法将md5存储为16字节哈希,而不是32字符的字符串?

    使用哈希函数(如Murmurhash)为每个md5字符串创建摘要。

    通过这种方式,您可以获得8字节(64位)摘要。但是,您无法从Murmurhash摘要中获取原始md5字符串。因此,如果你关心md5的值,你可以采用这种方法。