将独立的 redis 标记为只读
Mark standalone redis as read-only
我想将独立的 Redis 服务器(不是 Redis 集群,也不是 Redis 哨兵)标记为只读。我已经为此搜索了很长一段时间,但我似乎没有找到明确的答案(几乎所有答案都指向 Clustering 或 Sentinel)。我正在寻找一些配置修改 (CONFIG SET something
)。
注意:config set replica-read-only yes
不会将当前的 redis-server 设为只读,而只会将其副本设为只读。
我的用例基本上是我正在进行迁移,其中在某些时候我想将 redis-server 设置为只读。我的应用程序代码可以在写入调用发生时处理故障,所以这不是问题。
此外,如果这不能直接从 redis 服务器实现,我是否可以在客户端代码中执行一些具有相同效果的操作(我使用 redis-py 作为客户端库)? (虽然这不太理想)
我尝试过的事情
- 尝试了
config set replica-read-only yes
和其他配置。他们似乎没有应用当前的 redis-server。
- 尝试将 redis-server 标记为自身的副本(这不合逻辑,但只是想看看这是否有效),但结果它删除了我本地 redis 中的所有键,所以我无能为力。
您可以尝试几种解决方案:
您可以使用 rename-command
配置来禁用写入命令。如果您只想禁用少量命令,那是一个很好的解决方案。但是,由于写入命令太多,可能需要配置太多,容易漏掉一些。
如果您使用的是 Redis 6.0,您可以使用 Redis ACL 禁用特定用户的写入命令。
您可以为您的主服务器设置一个 read-only Redis 副本,并要求客户端从副本读取。
一旦写入完成并且您想将节点切换到 read-only,有几种方法可以做到这一点:
- 将 redis.conf 修改为“min-replicas-to-write 3”。由于您没有 3 个副本,因此您的节点将停止接受写入,但会继续提供读取服务,如下所示:
但是请注意,修改redis.conf后,您需要重启redis节点才能使更改生效。
- 另一种方法是当你想切换到只读模式时,此时你创建一个副本并让它与主节点同步,然后杀死主节点。然后副本将以只读形式存在。
我想将独立的 Redis 服务器(不是 Redis 集群,也不是 Redis 哨兵)标记为只读。我已经为此搜索了很长一段时间,但我似乎没有找到明确的答案(几乎所有答案都指向 Clustering 或 Sentinel)。我正在寻找一些配置修改 (CONFIG SET something
)。
注意:config set replica-read-only yes
不会将当前的 redis-server 设为只读,而只会将其副本设为只读。
我的用例基本上是我正在进行迁移,其中在某些时候我想将 redis-server 设置为只读。我的应用程序代码可以在写入调用发生时处理故障,所以这不是问题。
此外,如果这不能直接从 redis 服务器实现,我是否可以在客户端代码中执行一些具有相同效果的操作(我使用 redis-py 作为客户端库)? (虽然这不太理想)
我尝试过的事情
- 尝试了
config set replica-read-only yes
和其他配置。他们似乎没有应用当前的 redis-server。 - 尝试将 redis-server 标记为自身的副本(这不合逻辑,但只是想看看这是否有效),但结果它删除了我本地 redis 中的所有键,所以我无能为力。
您可以尝试几种解决方案:
您可以使用
rename-command
配置来禁用写入命令。如果您只想禁用少量命令,那是一个很好的解决方案。但是,由于写入命令太多,可能需要配置太多,容易漏掉一些。如果您使用的是 Redis 6.0,您可以使用 Redis ACL 禁用特定用户的写入命令。
您可以为您的主服务器设置一个 read-only Redis 副本,并要求客户端从副本读取。
一旦写入完成并且您想将节点切换到 read-only,有几种方法可以做到这一点:
- 将 redis.conf 修改为“min-replicas-to-write 3”。由于您没有 3 个副本,因此您的节点将停止接受写入,但会继续提供读取服务,如下所示:
但是请注意,修改redis.conf后,您需要重启redis节点才能使更改生效。
- 另一种方法是当你想切换到只读模式时,此时你创建一个副本并让它与主节点同步,然后杀死主节点。然后副本将以只读形式存在。