我想了解如何使用 Redis 构建应用程序。 我如何使用 Redis 处理以下用例? (带文件夹的图片库):
用户集合
id: 数字,
用户名:字符串
画廊文件夹集合
id: 数字
userId: 数字
文件夹名称:字符串
图库
id: 数字
userId: 数字
folderId: 数字
画廊名称:字符串
浏览量:数量
图片
id: 数字
galleryId: 数字
imageUrl: 字符串
如何使用redis查询图库?
1. 有时我想按 galleryName 过滤结果(用于搜索)
2. 有时我想通过 galleryName(用于搜索)+ Only galleries from userId
过滤结果
3. 有时我想按 galleryName(用于搜索)过滤结果 + 仅来自 userId 的画廊 + 按页面浏览量降序排序
4. 有时我想通过 id 或 id 获取图库
对于这个任务,Redis 中最好的结构是什么?
最佳答案
一种可能的方法是以下方法:
- 每个实体都应该由一个哈希数据结构表示,其中键是实体
id
,值是包含其余属性的JSON序列化实体实例包括或排除id
。 - 要实现过滤器,您需要在集合 和排序集合 中索引您的数据,有时在列表 中。例如,如果您想要获取所有以
a
开头的画廊,您可以构建一个名为galleries:byname:a
的集合,您将在其中存储所有以a
开头的图库 ID。另一方面,如果你想找到所有匹配标签或关键字的画廊,你需要一个名为galleries:bykeyword:family
的集合(关键字是家庭)。 - 要获取与关键字匹配的所有图库,您需要针对
galleries:bykeyword:family
执行smembers
或sscan
命令,获取所有图库标识符并获取完整对象,以使用hmget
命令针对完整图库对象的哈希值获取图库的元数据。hmget
让您可以提供一个或多个键 并在单个命令/操作中获取它们的值。
有很多方法。这可能取决于您的数据大小。你应该看看scan
-based命令。
这里的要点是,当您考虑使用 Redis 的数据策略时,您需要像手动数据索引一样定制您的解决方案。您不能指望查询,而是以一种您可以通过某些标准按原样获取的方式存储数据。也就是说,你需要非常了解支持 Redis 的数据结构,并谨慎使用它们来构建良好的数据策略,同时还要考虑性能。此外,一个很好的建议是在 NoSQL 世界中,如果您获得更高的性能,数据冗余就很好。
无论如何,您的问题没有确定的答案。现在您需要进行自己的研发!
关于redis - 如何在 Redis 上构建图库应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34703651/