1

可以使用 XREAD(或者可能是另一个命令)以原子方式检测数据是否写入 Redis 流?

进一步来说:

假设您在一个进程中将一些数据添加到 Redis 流中,并看到数据已通过某个自动生成的密钥成功添加。

XADD somestream foo bar

此 XADD 完成后,您立即在另一个进程中运行以下读取。

XREAD COUNT 1000 STREAMS somestream 0-0

这个 XREAD 是否保证返回数据?文档不清楚成功的 XADD 是否保证读者会立即看到添加的数据,或者是否可能会有一些小的延迟。

4

1 回答 1

1

Redis 著名的单线程架构回答了这个问题。当您XADD在一个进程(客户端)上执行并且在另一个进程(客户端)执行XREAD之后,服务器会连续执行它们,这保证了数据在XREAD执行之前将在那里。

接下来的引述来自The Little Redis Book

每个 Redis 命令都是原子的,包括执行多项操作的命令。此外,Redis 在使用多个命令时支持事务。

你可能不知道,但 Redis 实际上是单线程的,这就是如何保证每个命令都是原子的。在执行一个命令时,不会运行其他命令。(我们将在后面的章节中简要讨论缩放。)当您考虑某些命令执行多项操作时,这特别有用。

于 2020-06-25T20:09:41.357 回答