gpt4 book ai didi

Redis — 存储大 map 的最佳方式(字典)

转载 作者:IT王子 更新时间:2023-10-29 05:55:22 24 4
gpt4 key购买 nike

我需要做的是存储一个一对一的映射。数据集由大量同类键值对组成(10M+)。例如,可以在 Java 中使用 HashMap 对象的单个实例来存储此类数据。

第一种方法是存储大量键值对,如下所示:

SET map:key1 value1
...
SET map:key900000 value900000
GET map:key1

第二种选择是使用单个“哈希”:

HSET map key1 value
...
HSET map key900000 value900000
HGET map key1

Redis Hashes 有一些方便的命令(HMSETHMGETHGETALL 等),而且它们不会污染键空间,所以这看起来是一个更好的选择。但是,使用这种方法时是否有任何性能或内存注意事项?

最佳答案

是的,如Itamar Haber说,你应该看看这个 redis memory optimization guide .但您还应该记住一些其他事项:

  1. 比起 KEYS,更喜欢 HSET。 Redis仅仅在键空间管理上就消耗了大量的内存。简单(粗略)地说,1 个包含 1,000,000 个键的 HSET 消耗的内存比 1,000,000 个键(每个键有一个值)少 10 倍。
  2. 如果内存是主要目标,则保持 HSET 大小小于 hash-max-zipmap-entries 和有效的 hash-max-zipmap-value。请务必理解 hash-max-zipmap-entrieshash-max-zipmap-value 的含义。另外,请花一些时间阅读有关 ziplist 的内容。
  3. 您实际上不想用 10M+ 键处理 hash-max-zipmap-entries;相反,您应该将一个 HSET 分成多个插槽。例如,您将 hash-max-zipmap-entries 设置为 10,000。因此,要存储 1000 万个以上的 key ,您需要 1000 个以上的 HSET key ,每个 key 10,000 个。作为一个粗略的经验法则:crc32(key) % maxHsets。
  4. 了解 strings in redis并使用基于此结构的实际内存管理的 KEY 名称(在 HSET 中)长度。简单来说,将 key 长度保持在 7 个字节以下,每个 key 花费 16 个字节,但 8 个字节的 key 每个花费 48 个字节。为什么?了解 simple dynamic strings .

阅读以下内容可能会有用:

关于Redis — 存储大 map 的最佳方式(字典),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30087921/

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