我想将独立的redis服务器(不是redis集群,也不是redis sentinel)标记为只读。我已经在谷歌上搜索了很长一段时间,但我似乎没有找到一个明确的答案(几乎所有的答案都指向集群或哨兵)。我只是想修改一下配置( CONFIG SET something
).
注: config set replica-read-only yes
不使当前redis服务器为只读,而仅使其副本为只读。
我的用例基本上是我正在做一个迁移,在某种程度上我想使redis服务器成为只读的。每当发生写调用时,我的应用程序代码都可以处理失败,所以这不是问题。
另外,如果redis服务器不能直接实现这一点,我是否可以在客户机代码中执行一些具有相同效果的操作(我使用redis py作为客户机库)(尽管这不太理想)
我试过的东西
玩弄 config set replica-read-only yes
以及其他配置。他们似乎没有应用当前的redis服务器。
尝试将redis服务器标记为其自身的副本(这是不合逻辑的,但只是想看看这是否有效),但结果它删除了本地redis中的所有密钥,所以我无能为力。
2条答案
按热度按时间u5i3ibmn1#
写操作完成后,如果要将节点切换为只读,可以使用以下几种方法:
修改redis.conf,使其具有“min replicas to write 3”。由于您没有3个副本,您的节点将停止接受写入,但将继续提供读取服务,如下所示:
但是,请注意,在修改redis.conf之后,您必须重新启动redis节点才能使更改生效。
另一种方法是,当您想切换到只读模式时,此时创建一个复制副本,让它与主节点同步,然后终止主节点。然后复制副本将以只读形式存在。
rqenqsqc2#
您可以尝试以下几种解决方案:
你可以用
rename-command
配置以禁用写入命令。如果您只想禁用少量命令,这是一个很好的解决方案。但是,由于write命令太多,您可能需要太多的配置,并且很容易错过其中的一些命令。如果您使用的是redis6.0,那么可以使用redisacl为特定用户禁用write命令。
您可以为您的主机设置一个只读redis副本,并要求客户端从副本中读取。