当redis获得slave的密钥时,为什么要重定向到master?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当redis获得slave的密钥时,为什么要重定向到master?相关的知识,希望对你有一定的参考价值。

我想知道Redis Cluster模式下的read key

我的redis集群信息:

127.0.0.1:7001> cluster nodes
2f255a65c7238134a5b2b84671f1d1af01778178 127.0.0.1:7004@17004 slave 4c1fe92725284ae39f9b538674d9f13ae6d75d66 0 1519807517000 5 connected
cf434afde5f61917f46af8982f6f1e72bedabc9e 127.0.0.1:7001@17001 myself,master - 0 1519807516000 2 connected 5461-10922
4c1fe92725284ae39f9b538674d9f13ae6d75d66 127.0.0.1:7002@17002 master - 0 1519807517765 3 connected 10923-16383
281be7a01b553b0600789ec08e30c38949bfdd59 127.0.0.1:7005@17005 slave e2ca464b949bddc0e5414345ad6f238449be8e94 0 1519807516756 6 connected
e2ca464b949bddc0e5414345ad6f238449be8e94 127.0.0.1:7000@17000 master - 0 1519807517563 1 connected 0-5460
d86241a9eb69e8055de05dd95d54b348a836cbda 127.0.0.1:7003@17003 slave cf434afde5f61917f46af8982f6f1e72bedabc9e 0 1519807517000 4 connected

我想知道这个!

bash
❯ redis-cli -c -p 7003
127.0.0.1:7003> keys *
1) "key1"
127.0.0.1:7003> get key1
-> Redirected to slot [9189] located at 127.0.0.1:7001
"val1"
127.0.0.1:7001>

奴隶和主人有相同的钥匙 师父有同样的关键。


但为什么..为什么get key命令行为重定向到主? 为什么? 我不懂Redis Cluster ......

答案

默认情况下,slave将客户端重定向到其主服务器,因为从服务器上的数据可能是陈旧的,即写入主服务器可能不会同步到从服务器。

但是,有时我们不关心陈旧性,并且希望通过从slave读取(可能过时的)数据来扩展读取操作。

为了实现这一点,您可以将READONLY命令发送给slave。然后,该连接上的任何就绪操作都将由从属服务,并且不会被重定向到其主服务器。

如果要关闭READONLY模式,可以发送READWRITE命令告诉slave将读取请求重定向到master。

注意:

无论从机是在READONLY还是READWRITE模式,你都不能写入从机,即写操作总是被重定向到主机。

更新:slave-serve-stale-dataslave-read-only配置与READONLYREADWRITE命令无关。

slave-serve-stale-data控制从属服务器是否应该将请求重定向到主服务器,或者只是在它与主服务器失去连接时返回错误,或者复制仍在进行中。

slave-read-only控制你是否可以写入奴隶。但是,这些写入不会传播到主服务器和其他从服务器,并且在与主服务器重新同步后将被删除。

以上是关于当redis获得slave的密钥时,为什么要重定向到master?的主要内容,如果未能解决你的问题,请参考以下文章

redis keepalive+redis 主从高可用

Redis的复制(Master/Slave)

redis 系列21 复制Replication (上)

keepalive+redis 主从高可用

Redis主从sentinel故障自动切换

redis集群和主从复制