我正在尝试了解如何使用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
执行smembers
或sscan
命令,获取所有库标识符并获取完整对象,以使用hmget
命令对完整库对象的哈希获取库的元数据。hmget
允许您提供一个或多个键,并在单个命令/操作中获取它们的值
有很多方法。这可能取决于您的数据大小。您应该了解一下基于scan
的命令。
这里的重点是,当你考虑Redis的数据策略时,你需要像手动数据索引一样定制你的解决方案。您不能期望查询,但以某种标准可以获得的方式存储数据,即。也就是说,你需要非常清楚哪些数据结构支持Redis,并仔细使用它们来构建一个好的数据策略,同时考虑性能。此外,一个很好的建议是,在NoSQL世界中,如果您获得更高的性能,数据冗余是可以的。
不管怎样,你的问题没有明确的答案。现在你需要做你自己的R&D