如何确保用户不会从只读 Redis 从属设备读取陈旧(尚未同步)的数据?

问题描述 投票:0回答:2

我正在学习 Redis 复制,并且了解以下事实

1. By Default replicas are read only.
2. All writes happen to master
3. Master writes changes to internal buffer and then sends them slave for sync
4. Slave receives the buffered information and writes them to their memory

我有一个疑问/好奇 -

让我们假设 master 有一个

key:value
作为
name:rishi
。 这个键值在从属设备中也是同步/复制的。

现在用户用新值更新键名

name:coder
,主机将数据放入内部缓冲区以使其与从机同步。

那么,在更新从属设备之前,会向 Redis 发送一个针对“name”键的读取查询,是否有可能从从属设备中读取过时的数据?

caching redis distributed-system
2个回答
1
投票

是的,有一个很小的时间窗口,可以从副本(fka 从属)节点读取较旧的数据。

参考:Redis 复制


0
投票

我认为replica-serve-stale-data在这种情况下很有用。根据此配置文件及其注释,所有副本(从属)和主服务器上的replica-serve-stale-data no。这有助于保持 Redis 部署的一致性,并确保客户端始终收到最新信息。:

当副本失去与主的连接时,或者当 复制仍在进行中,副本可以同时作用于两个 不同的方式:

  1. 如果replica-serve-stale-data设置为“yes”(默认值) 复制品将 仍然回复客户请求,可能使用过时的数据,或者 如果这是第一次同步,数据集可能只是空的。

  2. 如果replica-serve-stale-data设置为“no”,副本将回复 有错误 “MASTERDOWN 与 MASTER 的链接已关闭,replica-serve-stale-data 设置为“no”” 所有数据访问命令,不包括以下命令: 信息、复制、身份验证、关闭、REPLCONF、角色、配置、订阅、 取消订阅、PSUBSCRIBE、PUNSUBSCRIBE、发布、PUBSUB、命令、发布、 主机和延迟。

副本服务陈旧数据是

© www.soinside.com 2019 - 2024. All rights reserved.