例如,我看到许多人正在做类似以下的事情:
> 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
的值,以确保为您的环境正确处理哈希值。
您可以在memory optimization section of the documentation中阅读有关详细信息的所有信息。