【问题标题】:EVAL vs. WATCH/GET/MULTI/EXECEVAL 与 WATCH/GET/MULTI/EXEC
【发布时间】:2014-06-26 16:18:02
【问题描述】:

我已阅读有关 EVAL 的文档,其中指出“Redis 保证脚本以原子方式执行:在执行脚本时不会执行其他脚本或 Redis 命令。”

我还阅读了关于使用 WATCH/GET/MULTI/EXEC 进行本质上是乐观锁定事务的信息。我现在有一个关于这两个构造之间的并发差异的问题。

在我看来,如果我想读取多个键,进行冗长的计算(例如,解析几百 KB 的 json,然后做出一些决定)然后写回结果,如果我使用 EVAL我将阻止对 redis 数据库的所有请求,即使是那些与不属于我将与之交互的集合的键交互的请求。

另一方面,如果我使用 WATCH 方法,我将需要构建重试逻辑,但如果我正在观察一百万个中的 100 个键,我只需要担心其他客户端与这 100 个键进行交互,我赢了'实际上并没有在整个期间阻塞数据库,只是在 EXEC 调用期间?

请让我知道这种理解是否正确,或者如果我在这里遗漏了什么,请给我任何澄清。

【问题讨论】:

    标签: redis


    【解决方案1】:

    你的理解是完美的:)

    但是,您应该考虑的一点是,EVALing 可以让您节省网络带宽和延迟,因为一切都是在服务器端完成的。我并不是说仅此一项就应该对它有利,特别是如果您按照您的问题建议对数据进行大量处理,但您应该牢记这一点。

    【讨论】:

      猜你喜欢
      • 2021-04-01
      • 2013-03-24
      • 2020-08-25
      • 2020-11-08
      • 2021-06-29
      • 2022-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多