假设我们已经简化了具有以下实体的在线商店:产品、相关产品和类别。关系很简单:
产品与类别相关联
产品有相关产品
产品价格因地区而异
在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解码。现在我们知道了相关产品的分类清单。
获取相关产品类别。
它的工作原理和工作速度都非常快,但是这可以用redis lua脚本来完成吗?我计划通过lua完成这项工作,合并一个大json(或多个小json)并返回到客户机。值得做吗?为什么?
谢谢你,对不起我的英语。
2条答案
按热度按时间2sbarzqh1#
lua脚本的性能取决于您在脚本中所做的操作。由于redis使用单线程命令执行器,如果您的脚本执行时间较长,它将阻止其他命令,并使redis的响应速度较慢。
对于您的情况,我建议您直接从redis查询不同的数据,并在应用程序中处理它们之间的关系。这样,redis只用于数据存储,不用于逻辑,使其更纯粹、更快。
6pp0gazn2#
是的,lua脚本可能会让你得到比两个希望更好的延迟。特别是如果您不需要检索所有字段,这样您应该减少网络上的数据负载,只返回相关字段。
顺便说一句,你可能想检查一下https://redisgears.io and https://redisjson.io in 案例您有更复杂的用例,可能需要支持redis集群或更复杂的json。