Redis设置vs hash

时间:2012-11-26 00:19:18

标签: redis

在许多Redis教程(例如this one)中,数据存储在一个集合中,但是多个值组合在一个字符串中(即用户帐户可能存储在集合中作为两个条目,“用户:1000:用户名“和”用户:1000:密码“)。

然而,Redis也有哈希。似乎有一个“user:1000”哈希更有意义,它包含一个“用户名”条目和一个“密码”条目。您只需直接在哈希中访问它们,而不是连接字符串以访问特定值。

那为什么不使用它呢?这些只是旧教程吗?或者Redis哈希有性能问题吗?

3 个答案:

答案 0 :(得分:44)

Redis哈希适用于存储更复杂的数据,就像您在问题中建议的那样。我正确地使用它们 - 存储具有需要缓存的多个属性的对象(特别是电子商务站点上特定产品的库存数据)。当然,我可以使用连接字符串 - 但这会给我的客户端代码增加不必要的复杂性,并且无法更新单个字段。

你可能是对的 - 教程可能只是在Hashes引入之前。它们显然是为存储对象表示而设计的:http://oldblog.antirez.com/post/redis-weekly-update-1.html

我想一个问题是,当插入一个新项目时,Redis必须服务的命令数量(n个命令,其中n是Hash中的字段数)与简单的String SET命令相比。我还没有发现这是一个服务问题,每天服用Redis大约100万次。对我使用正确的数据结构比可忽略的性能影响更重要。

(另外,请参阅我对Redis Sets vs. Redis Strings的评论 - 我认为你的问题是指字符串,但如果我错了,请纠正我!)

答案 1 :(得分:40)

哈希是在Redis中存储数据的最有效方法之一,甚至可以在有效的情况下推荐它们使用。

http://redis.io/topics/memory-optimization

  

尽可能使用哈希

     

小哈希在非常小的空间中编码,因此您应该尝试每次使用哈希值来表示数据。例如,如果您在Web应用程序中有表示用户的对象,而不是使用名称,姓氏,电子邮件,密码的不同密钥,请使用包含所有必填字段的单个哈希。

答案 2 :(得分:0)

用例比较:

集合提供一个语义接口,以将数据作为集合存储在Redis服务器中。使用 例如,此类数据的案例更多是出于分析目的 有多少人浏览产品页面,有多少最终购买 产品。

哈希提供一个语义接口,用于将简单和复杂的数据对象存储在 Redis服务器。例如,用户个人资料,产品目录等。

参考:Learning Redis