EVAL vs. WATCH/GET/MULTI/EXEC



我读过关于EVAL的文档,其中指出"Redis保证脚本以原子方式执行:当脚本正在执行时,不会执行其他脚本或Redis命令。"

我还读到关于使用WATCH/GET/MULTI/EXEC来处理本质上是乐观锁定的事务。我现在有一个关于这两种结构之间并发性差异的问题。

这听起来像我,如果我想读一些键,做一个冗长的计算(说,解析几百KB的json,然后做出一些决定),然后写回结果,如果我使用EVAL我将阻止所有请求到redis数据库,甚至那些与键不是我将交互的一部分交互。

另一方面,如果我使用WATCH方法,我将需要构建重试逻辑,但是如果我监视一百万个键中的100个,我只需要担心其他客户端与这100个键交互,我实际上不会在整个期间阻塞数据库,只是在执行调用期间?

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

你的理解是完美的:)

但是,您应该考虑的一点是,EVALing可以节省网络带宽和延迟,因为一切都是在服务器端完成的。我并不是说单凭这一点就可以使天平偏向于它,特别是如果你正在对你的问题所建议的数据进行大量处理,但是你应该记住这一点。

最新更新