Redis 中的 WATCH 命令与 Java 中的 volatile 变量的行为方式相同吗?

Does the command WATCH in Redis behave in the same way as volatile variable in Java?

我对 Redis 事务概念的工作原理有点犹豫。

据我所知,事务是 multiexec 之间的命令列表,它不会立即执行,但会延迟到 exec 被调用。

假设我以原子方式为 Redis 赋值:

MULTI
  get current value and increment
EXEC

就在此时,新线程出现并尝试读取如上所示存储的值。这是否意味着在事务完成之前此值将不可用,并且此线程将以错误的方式执行其逻辑,因为尚未读取此值?

并且为了让线程有可能读取这个值,同时事务是 运行 我需要使用 WATCH ,它与 volatile 变量完全相同 - 存储对值的访问,这是一种被交易阻止?

请查看 Redis 事务文档 - https://redis.io/topics/transactions

首先,您需要记住 Redis 是单线程的。 当您在调用 MULTI 后发送命令时,Redis 不会执行该命令,而只是 QUEUED 它。 只是,当 EXEC 被调用时,主线程(唯一的执行线程)是 运行 事务中的所有 QUEUED 命令。因此,没有其他客户可以阅读部分内容。

至于WATCH,它不用作volatile,而只是作为Redis的指示器,如果在调用WATCH和调用[=之间更改了此键12=] 事务不应失败未提交。

使用 WATCH 可以确保在 WATCHMULTI 之间完成的任何读取在调用 EXEC 时仍然有效。