我需要做的是存储一对一的映射。数据集由大量相同类型的键值对(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有一些方便的命令(HMSET
,HMGET
,HGETALL
等),并且它们不会污染密钥空间,因此这看起来是更好的选择。但是,使用这种方法时是否有任何性能或内存考虑因素?
答案 0 :(得分:14)
是的,正如Itamar Haber所说,你应该看看redis memory optimization guide。但你也应该记住这些事情(几行):
hash-max-zipmap-entries
且有效hash-max-zipmap-value
。请务必了解hash-max-zipmap-entries
和hash-max-zipmap-value
的含义。还需要一些时间来阅读有关ziplist的信息。hash-max-zipmap-entries
(为了减慢此键的访问速度),您应该在某些插槽中断开一个HSET。例如,您将hash-max-zipmap-entries
设置为10,000。因此,要存储10M +密钥,您需要1000个HSET密钥,每个密钥10,000个。粗略的例子 - crc32(key)%maxHsets。 阅读以下内容可能很有用: