在许多Redis教程(例如this)中,数据存储在一个集合中,但是多个值组合在一个字符串中(即,一个用户帐户可能作为两个条目存储在集合中,“ user:1000:username”和“用户:1000:密码”)。
但是,Redis也有哈希值。似乎更有意义的是使用“ user:1000”散列,其中包含“ username”条目和“ password”条目。无需将字符串串联以访问特定值,您只需直接在哈希中访问它们即可。
那么,为什么没有使用太多呢?这些只是旧教程吗?还是Redis哈希有性能问题?
像您在问题中建议的那样,Redis散列可用于存储更复杂的数据。我正是使用它们来存储具有多个需要缓存的属性的对象(具体来说,是电子商务网站上特定产品的库存数据)。当然,我可以使用串联字符串- 但这会给我的客户端代码增加不必要的复杂性,并且无法更新单个字段。
您可能是对的- 这些教程可能只是从引入哈希开始的。它们显然是为存储对象表示而设计的:http : //oldblog.antirez.com/post/redis-weekly- update-1.html
我想一个问题是,与简单的String SET命令相比,插入新项时Redis必须服务的命令数量(n个命令,其中n是哈希中的字段数)。我还没有发现这对Redis每天服务约一百万次的服务来说是一个问题。对我而言,使用正确的数据结构比对性能的影响微不足道。
(另外,请参阅我关于Redis Sets与Redis Strings的评论-我认为您的问题是针对Strings,但是如果我错了,请更正我!)