Redis设置vs hash

Nai*_*rou 68 redis

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

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

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

Mik*_*e G 49

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的评论 - 我认为你的问题是指字符串,但如果我错了,请纠正我!)

  • 嗨迈克,两个问题。首先,每天 100 万次点击大约是 12 req/s,在 Redis 基准测试中,您可以在低端 EC2 机器上看到 30K,在高端笔记本电脑上看到 120K。每秒超过 12 次怎么样?你认为如果你每秒有几千个 SET 会比 HASH 更好吗?第二个问题是关于您所说的“n 个命令,其中 n 是哈希中的字段数”,如果您需要存储一个带有两个参数的项目,它将是 2 次 SET 用于单独存储,如果它与哈希相同做同样的事情。您确定 HASH 命中 Redis 的次数与其字段一样多?tnx (2认同)

Dan*_*yle 43

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

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

尽可能使用哈希值

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