当前位置:  开发笔记 > 编程语言 > 正文

Redis:如何存储用户哈希列表并检索它?

如何解决《Redis:如何存储用户哈希列表并检索它?》经验,为你挑选了1个好方法。

我今天开始使用redis并且我已经完成了教程和stackoverflow的一些链接,但是我无法理解如何正确使用redis来看似是一个非常简单的用例.

目标:将多个用户数据保存到redis中,并立即读取所有用户.

我启动了一个redis客户端,我首先添加了第一个具有id的用户1:

127.0.0.1:6379> hmset user:1 name "vitor" age 35
OK
127.0.0.1:6379> hgetall user:1 
1) "name"
2) "vitor"
3) "age"
4) "35"

我添加了几个用户,执行以下几个命令:

127.0.0.1:6379> hmset user:2 name "nuno" age 10

我(可能错误地)期望能够通过以下方式查询我的所有用户:

hgetall "user:"

甚至

hgetall "user:*"

我在教程中没有看到这样的事实,有点告诉我,我没有使用redis正确的用例.

你能告诉我这个用例的方法应该是什么?



1> Tw Bert..:

要理解为什么这些操作在NoSQL实现中看起来并不重要,最好考虑为什么NoSQL存在(并且已经变得非常流行).

当您查看像memcached这样的早期NoSQL实现时,第一个用例非常简单,但非常重要:分布式数据的快速缓存,缓存例如网页数据.很快就会添加集群和分片等内容,因此并非所有数据都必须在集群中的每个节点上同时可用,但可以按需收集.

NoSQL与关系数据存储非常不同.不要过度使用它.考虑关系数据库,因为它们有时更适合您要完成的任务.在你设计的所有东西中,问问自己"这种规模是否很好?".

好的,回到你的问题.进行通配符搜索通常是不好的做法.您可以以可扩展的方式检索数据的方式准备数据.

Redis是一个非常巧妙的解决方案,允许您以优雅的方式克服许多NoSQL限制.

如果获得"所有用户的列表"不是你必须经常做的事情,或者不需要很好地扩展,总是"我真的总是想要所有用户",因为无论如何它都是用于每日扫描,使用HSCAN.SCAN具有适当批量大小的操作不会妨碍其他客户端,您可以一次检索几千个记录,并且在几次调用之后您就拥有了所有内容.

您还可以将用户存储在SET.一组中没有排序,所以没有分页.它可以帮助您保持用户名的独特性.

如果你想做"让我所有的用户以字母'a'开头"这样的话,我会用一个ZSET.ZRANGEBYLEX在我们发言的时候,我会等待一两个星期即将发布.或者像Josiah Carlsons的'rom'包一样使用ORM.

当你问自己"但现在我必须做三次电话而不是一次存储我的数据......?!":是的,这是它的工作原理.如果需要原子性,请使用Lua脚本或MULTI + EXEC流水线.Lua通常更容易.

您也可以问自己是否HSET需要使用a .您需要检索单个数据成员吗?每个密钥或成员都有一些开销.最重要的是,HGETALL它具有Big-O规范O(N),因此它不能很好地扩展.使用JSON或MsgPack将整个行序列化可能会更好,并将其存储在一个HSET成员中,或者只是一个简单的GET/ SET.也读了SORT.

希望这有帮助,TW

推荐阅读
Gbom2402851125
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有