redis - 如何在 Redis 上构建图库应用程序?

标签 redis

我想了解如何使用 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 执行 smemberssscan 命令,获取所有图库标识符并获取完整对象,以使用 hmget 命令针对完整图库对象的哈希值获取图库的元数据。 hmget 让您可以提供一个或多个 并在单个命令/操作中获取它们的值。

有很多方法。这可能取决于您的数据大小。你应该看看scan-based命令。

这里的要点是,当您考虑使用 Redis 的数据策略时,您需要像手动数据索引一样定制您的解决方案。您不能指望查询,而是以一种您可以通过某些标准按原样获取的方式存储数据。也就是说,你需要非常了解支持 Redis 的数据结构,并谨慎使用它们来构建良好的数据策略,同时还要考虑性能。此外,一个很好的建议是在 NoSQL 世界中,如果您获得更高的性能,数据冗余就很好。

无论如何,您的问题没有确定的答案。现在您需要进行自己的研发!

关于redis - 如何在 Redis 上构建图库应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34703651/

相关文章:

php - REDIS php扩展连接错误

node.js - 如何创建多个 Nodejs 套接字 io 服务器客户端?

node.js - 在 nodejs 上循环 redis 返回的 promise

Laravel Redis/如何只刷新特定的 redis 数据库?

redis - 是否可以在一个集合中获取结果的子集进行分页?

ruby-on-rails - 为什么我能在 Heroku 看到这么多 worker ?我如何限制其他员工的访问权限?

python - 当有大量数据要发送时,如何在 Redis 中实现事务?

java - Redis 在哈希中存储列表

redis - 如何在从属模式下在 Cloudfoundry 上配置 Redis 实例?

php - 在事务上下文之外调用 redis 命令