【发布时间】:2014-06-26 16:18:02
【问题描述】:
我已阅读有关 EVAL 的文档,其中指出“Redis 保证脚本以原子方式执行:在执行脚本时不会执行其他脚本或 Redis 命令。”
我还阅读了关于使用 WATCH/GET/MULTI/EXEC 进行本质上是乐观锁定事务的信息。我现在有一个关于这两个构造之间的并发差异的问题。
在我看来,如果我想读取多个键,进行冗长的计算(例如,解析几百 KB 的 json,然后做出一些决定)然后写回结果,如果我使用 EVAL我将阻止对 redis 数据库的所有请求,即使是那些与不属于我将与之交互的集合的键交互的请求。
另一方面,如果我使用 WATCH 方法,我将需要构建重试逻辑,但如果我正在观察一百万个中的 100 个键,我只需要担心其他客户端与这 100 个键进行交互,我赢了'实际上并没有在整个期间阻塞数据库,只是在 EXEC 调用期间?
请让我知道这种理解是否正确,或者如果我在这里遗漏了什么,请给我任何澄清。
【问题讨论】:
标签: redis