例如,我看到许多人在做以下操作:
> set data:1000 "some string 1"
> set data:1001 "some string 2"
但是,使用哈希量最大程度地减少键的数量?
> hset data 1000 "some string 1"
> hset data 1001 "some string 2"
在第二种方面,它将仅创建一个data
密钥,而不是以第一种方式创建许多键。
推荐哪种方式?
我只是看到一些人和教程正在做hset data:10 01 xxx
。这实际上与我的问题无关。我的问题只是询问set data:1001 xxx
和hset data 1001 xxx
之间推荐什么。
我不打算修改hash-max-zipmap-entries
和hash-max-zipmap-value
。这意味着哈希最终将超过两个值。在这样的配置中,这两种方式相同吗?还是建议使用哪种方式?
使用字符串的原因:
- 您需要每个值超时
- 这些值在语义上是孤立的
- 您在集群上,并希望将值碎片在不同的节点上分布以扩散载荷(碎片基于键)
使用哈希的理由:
- 您希望能够一次清除所有这些(
del
/unlink
),或者有一个超时会影响所有这些值的全部 - 您希望能够枚举它们(优于
hscan
/hgetall
而不是scan
/keys
) - 键上的内存使用稍好
- 这些值与语义相关
- 所有值都可以在同一节点上(无论是单人服务器还是群集)
这一切都取决于您要支持的权衡。通常,与使用简单键相比,使用哈希的内存足迹要少。实际上,它的记忆范围少了。访问哈希值是恒定的时间。因此,如果您仅将Redis用作钥匙值商店,那么哈希效率比简单的键要高。
但是,如果您需要支持到期,密钥空间通知等,则需要使用简单的键,然后您需要使用简单的键。
请注意您的redis.conf中的hash-max-zipmap-entries
和hash-max-zipmap-value
的值,以确保对环境正确处理哈希。
您可以在文档的"内存优化"部分中阅读所有有关详细信息。