我需要做的是存储一对一的映射.数据集由大量相同类型的键值对(10M +)组成.例如,可以使用Java中的单个HashMap对象实例来存储此类数据.
第一种方法是存储大量的键值对,如下所示:
SET map:key1 value1
...
SET map:key900000 value900000
GET map:key1
Run Code Online (Sandbox Code Playgroud)
第二种选择是使用单个"哈希":
HSET map key1 value
...
HSET map key900000 value900000
HGET map key1
Run Code Online (Sandbox Code Playgroud)
Redis的哈希有一些方便的命令(HMSET,HMGET,HGETALL等),他们不污染密钥空间,所以这看起来像一个更好的选择.但是,使用此方法时是否有任何性能或内存考虑因素?
mis*_*ion 16
是的,正如Itamar Haber所说,你应该看看redis内存优化指南.但是你也应该记住这些事情(几行):
hash-max-zipmap-entries有效hash-max-zipmap-value.一定要明白,意义hash-max-zipmap-entries和hash-max-zipmap-value方法.还需要一些时间来阅读有关ziplist的信息.hash-max-zipmap-entries用10M +键来处理(为了减慢这个键的访问速度),你应该在一些插槽中打破一个HSET.例如,您设置hash-max-zipmap-entries为10,000.因此,要存储10M +密钥,您需要1000个HSET密钥,每个密钥10,000个.粗略的例子 - crc32(key)%maxHsets.阅读以下内容可能有用: