字符串类型的字符串hash?哈希只有一个钥匙,而不是许多钥匙



例如,我看到许多人在做以下操作:

> 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 xxxhset data 1001 xxx之间推荐什么。

我不打算修改hash-max-zipmap-entrieshash-max-zipmap-value。这意味着哈希最终将超过两个值。在这样的配置中,这两种方式相同吗?还是建议使用哪种方式?

使用字符串的原因:

  • 您需要每个值超时
  • 这些值在语义上是孤立的
  • 您在集群上,并希望将值碎片在不同的节点上分布以扩散载荷(碎片基于键)

使用哈希的理由:

  • 您希望能够一次清除所有这些(del/unlink),或者有一个超时会影响所有这些值的全部
  • 您希望能够枚举它们(优于hscan/hgetall而不是scan/keys
  • 键上的内存使用稍好
  • 这些值与语义相关
  • 所有值都可以在同一节点上(无论是单人服务器还是群集)

这一切都取决于您要支持的权衡。通常,与使用简单键相比,使用哈希的内存足迹要少。实际上,它的记忆范围少了。访问哈希值是恒定的时间。因此,如果您仅将Redis用作钥匙值商店,那么哈希效率比简单的键要高。

但是,如果您需要支持到期,密钥空间通知等,则需要使用简单的键,然后您需要使用简单的键。

请注意您的redis.conf中的hash-max-zipmap-entrieshash-max-zipmap-value的值,以确保对环境正确处理哈希。

您可以在文档的"内存优化"部分中阅读所有有关详细信息。

最新更新