gpt4 book ai didi

redis - Redis 中键值对的存储方式

转载 作者:可可西里 更新时间:2023-11-01 11:18:12 31 4
gpt4 key购买 nike

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

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

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

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

  1. 剩余内存 7 gb 花在什么地方?
  2. 有没有办法将 md5 存储为 16 字节散列,而不是 32 个字符的字符串?

谢谢,非常感谢任何帮助。

最佳答案

On what is spent rest of the memory, 7 gb?

简短回答:Redis 不会将键和值存储为原始字符串

事实上,

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

  2. 值被包装到一个 redisObject 结构中,它也有一些开销,例如对象编码,引用计数。

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

所有这些开销都会消耗剩余的内存。

为了提高内存效率,可以引用@Kevin Christopher Henry 提到的文章(小hash可以节省很多redisObject的开销,可以使用ziplist 使元素在内存中更紧凑)。

Is there a way to store md5 as 16 bytes hash, not string with 32 characters?

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

这样就可以得到一个8字节(64位)的摘要。但是,您无法从 Murmurhash 摘要中获取原始 md5 字符串。所以如果你关心md5的值,你可以采用这种方法。

关于redis - Redis 中键值对的存储方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41787790/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com