【发布时间】:2020-12-10 06:14:51
【问题描述】:
假设我们已经简化了具有以下实体的在线商店:产品、相关产品和类别。关系很简单:
- 产品与类别相关联
- 产品有相关产品
- 产品价格因地区而异
所有实体在 Redis 中都存储为 json 字符串,类似于:
产品(及相关产品):{"productId":1, "title": "Product", "relatedProductIds":[4,5,6], "categoryIds":[1,2,3]}
产品价格:{"price": 555.5, "region": "eu"}
分类:{"categoryId": 12, "title": "Category"}
我们的任务是从 redis 中获取 整棵树 以获得一些产品 ID:产品、产品类别、产品价格、产品相关产品、相关产品类别、相关产品价格。从客户端执行此操作是可以的,但需要多次请求 redis。整个过程可以这样描述:
- 获取所有必需的产品和价格,并对其进行 json 解码。现在我们知道了主要产品类别和相关产品 ID 的列表。
- 获取相关产品的类别、相关产品和价格,并对其进行 json 解码。现在我们知道了相关产品类别的列表。
- 获取相关产品类别。
它可以运行而且运行速度非常快,但是这可以使用 redis lua 脚本来完成吗?我打算通过lua完成这项工作,组合一个大json(或多个小json)并返回给客户端。值得做吗?为什么?
谢谢你,对不起我的英语。
【问题讨论】:
-
您是在单个 Redis 上运行还是在集群 Redis 上运行?
-
@GuyKorland 你好!所有实体都存储在单个实例上,但我们有多个实例副本并在它们之间保持平衡。因此,无需去另一个实例寻找某个实体,所有需要的实体都可以在同一个实例中找到。
-
这些是您存储的真实 JSON 结构,还是包含更多您可能不需要检索的字段?
-
@GuyKorland 不,这是简化的。我们有更多具有更多字段的实体,但我可以创建仅具有关系的光键,例如 - 这不是问题。