然而,Redis也有哈希。似乎更合理的方式是使用“user:1000”哈希,其中包含“用户名”条目和“密码”条目。而不是连接字符串来访问特定的值,在哈希中直接访问它们。
那么为什么没被广泛使用呢?这些只是旧的教程吗?还是Redis哈希存在性能问题?
Redis哈希适合存储更复杂的数据,就像你在问题中提到的那样。我正是用它们来存储具有多个属性需要缓存的对象(特别是电子商务网站上特定产品的库存数据)。当然,我也可以使用连接字符串-但是这会给客户端代码增加不必要的复杂性,并且不能更新单个字段。
你可能是对的-教程可能只是在Hashes被引入之前编写的。它们显然是为存储对象表示而设计的:http://oldblog.antirez.com/post/redis-weekly-update-1.html
我想一个问题可能是Redis在插入新项目时必须处理的命令数量(n个命令,其中n是Hash中字段的数量)与简单的字符串SET命令相比。但我在每天大约向Redis发出100万次请求的服务上还没有遇到过这个问题。对我而言,使用正确的数据结构比微不足道的性能影响更重要。
(此外,请查看我的评论,了解Redis集合与Redis字符串的区别-我认为你的问题是关于字符串的,但如果我错了请纠正我!)
哈希是 Redis 中存储数据的最有效方法之一,Redis 推荐尽可能使用哈希来存储数据。
http://redis.io/topics/memory-optimization
尽可能使用哈希
小型哈希可以用非常小的空间编码,因此您应该尽可能使用哈希来表示您的数据。例如,如果您在 Web 应用程序中有代表用户的对象,则不要为姓名、姓氏、电子邮件、密码使用不同的键,而是使用一个包含所有所需字段的单个哈希。
使用案例比较:
在Redis服务器中,集合为数据存储提供了语义接口。这种类型的数据更多用于分析目的,例如有多少人浏览了产品页面,其中有多少人最终购买了产品。
哈希表在Redis服务器中提供了语义接口,可以存储简单和复杂的数据对象。例如,用户资料,产品目录等。
参考: 学习Redis
SETS
的使用案例
唯一性:
我们必须强制应用程序确保每个用户名只能由一个人使用。如果有人使用用户名注册,我们首先查找用户名集合
SISMEMBER setOfUsernames newUsername
创建不同记录之间的关系:
想象一下你的应用程序中有喜欢
功能。您可能为每个单独的用户设置一个单独的集合,并存储该用户到目前为止所喜欢的图像的ID。
查找人们喜欢的共同属性
在约会应用程序中,用户通常选择不同的属性,并将这些属性存储在集合中。为了帮助人们轻松匹配,我们的应用程序可能会检查这些共同属性的交集
SINTER user#45:likesSet user#34:likesSet
当我们有项目列表且顺序无关紧要时
例如,如果您想限制要访问您的应用程序的API地址或阻止电子邮件向您发送电子邮件,则可以将它们存储在集合中。
Hash
的使用案例
Redis哈希通常用于存储复杂的数据对象:会话、用户等。哈希更加优化内存。