如何在Redis上构建Gallery应用程序



我正在尝试了解如何使用Redis构建应用程序。如何使用redis处理以下用例?(带文件夹的图像库):

用户集合

id:数字,
用户名:字符串

库文件夹集合

id:数字
userId:编号
文件夹名称:字符串

画廊

id:数字
userId:编号
folderId:编号
galleryName:String
pageViews:Number

图像

id:数字
galleryId:编号
imageUrl:字符串

如何使用redis查询图库

1.有时我想按galleryName过滤结果(用于搜索)
2.有时我想按galleryName(用于搜索)+仅从userId中筛选画廊来过滤结果
3.有时我想按galleryName(用于搜索)+仅用户ID中的画廊+按页面视图降序排序来过滤结果4.有时我只想通过id或id的来获取图库

Redis中执行此任务的最佳结构是什么?

一种可能的方法如下:

  • 每个实体都应该由散列数据结构表示,其中键是实体id,值是JSON序列化的实体实例,包含包括或不包括id的其余属性
  • 要实现过滤器,您需要在集合排序集合中索引数据,有时还需要在列表中索引数据。例如,如果您想获得以a开头的所有库,您可以构建一个名为galleries:byname:a,在其中存储以a开头的所有画廊ID。另一方面,如果您想查找与标签或关键字匹配的所有库,则需要一个名为galleries:bykeyword:family集合(其中关键字为family
  • 要获取与关键字匹配的所有库,您需要对galleries:bykeyword:family执行smemberssscan命令,获取所有库标识符并获取完整对象,以使用hmget命令对完整库对象的哈希获取库的元数据。hmget允许您提供一个或多个,并在单个命令/操作中获取它们的值

有很多方法。这可能取决于您的数据大小。您应该了解一下基于scan的命令。

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

不管怎样,你的问题没有明确的答案。现在你需要做你自己的R&D

最新更新