【问题标题】:One Redis call, Multiple command execution with return types一次 Redis 调用,使用返回类型执行多个命令
【发布时间】:2014-02-19 16:35:44
【问题描述】:

我需要在 Redis 上执行以下操作:

ZINTERSECT out 2 myset1 myset2
ZRANGE out 0 -1 (lets say it returns a set [20,30,40,50])
MGET user:20:blabla user:30:blabla user:40:blabla user:50:blabla (it returns [1,2,3,4])
ZRANGE blabla:1:value 0 -1
ZRANGE blabla:2:value 0 -1
ZRANGE blabla:3:value 0 -1
ZRANGE blabla:4:value 0 -1 

这是我的“列表列表”类型结构的一项事务。我的问题:

1- 是否可以一次调用运行它?

2- 我应该为此使用事务还是脚本?

3- 在没有 Redis 的脚本或事务功能的情况下,在高流量下运行所有​​这些行是否可行?

谢谢

【问题讨论】:

    标签: java data-structures architecture redis


    【解决方案1】:

    2 - 我应该为此使用事务还是脚本?

    由于您在后续命令中使用某些命令的结果,因此可以使用脚本。

    Lua 脚本通常很快。根据定义,Redis 中的脚本也是 事务性的

    3 - 在没有 Redis 的脚本或事务功能的情况下在高流量下运行所有​​这些行是否可行?

    这取决于您认为什么是“高流量”。无论如何,您应该测试并查看您的方法是否可行。在大多数情况下,一个简单的 Lua 脚本也会很快。

    最重要的是,您应该考虑将要使用的每个命令的时间复杂度。这些可以在documentation of each command 中找到。

    【讨论】:

    • 感谢您的回复。对于问题 1,我需要返回值。我写的行不仅是写的。一个的结果用于另一个。在这种情况下,它如何与“一次通话”一起工作?不需要先运行第一个来获得必要的设置吗?
    • 只有 lua 脚本可以处理某些命令依赖于前一个命令的结果的情况。
    • 我决定使用流水线调用而不是脚本。我的压力测试结果是可以接受的。我可以通过 2-3 个电话来处理这个过程。 Lua 脚本是否比流水线方法更快?
    • @anL 不。一些流水线命令应该比带有脚本的等效命令更快。
    猜你喜欢
    • 2011-01-21
    • 1970-01-01
    • 2017-05-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-11
    • 1970-01-01
    • 2012-08-31
    • 2016-11-10
    相关资源
    最近更新 更多