我已经阅读了 EVAL 的文档,其中提到 "Redis 保证脚本的执行是原子性的:在执行脚本时不会执行任何其他脚本或 Redis 命令。"
我也了解了使用 WATCH/GET/MULTI/EXEC 实现的乐观锁事务。现在我有一个关于这两种构建之间并发性差异的问题。
听起来如果我想要读取多个键、进行一些耗时的计算(比如解析几百 KB 的 JSON 并做出一些决策),然后写回结果,如果我使用 EVAL,我将阻塞对 Redis 数据库的所有请求,即使那些与我交互的键不属于这个集合。
另一方面,如果我使用 WATCH 方法,我将需要构建重试逻辑,但如果我正在监视100万个键中的100个键,则只需要担心其他客户端与这100个键交互,而不会在整个期间阻塞数据库,只会在 EXEC 调用期间阻塞吗?
请告诉我我的理解是否正确,如果我漏掉了什么,请给我任何澄清。
我也了解了使用 WATCH/GET/MULTI/EXEC 实现的乐观锁事务。现在我有一个关于这两种构建之间并发性差异的问题。
听起来如果我想要读取多个键、进行一些耗时的计算(比如解析几百 KB 的 JSON 并做出一些决策),然后写回结果,如果我使用 EVAL,我将阻塞对 Redis 数据库的所有请求,即使那些与我交互的键不属于这个集合。
另一方面,如果我使用 WATCH 方法,我将需要构建重试逻辑,但如果我正在监视100万个键中的100个键,则只需要担心其他客户端与这100个键交互,而不会在整个期间阻塞数据库,只会在 EXEC 调用期间阻塞吗?
请告诉我我的理解是否正确,如果我漏掉了什么,请给我任何澄清。