我想知道redis集群模式下的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>
从机与主机具有相同的密钥
主人有同样的钥匙。
但是为什么……为什么要将命令行为重定向到master????
为什么?
我不明白redis集群…
最佳答案
默认情况下,slave会将客户机重定向到其主服务器,因为从服务器上的数据可能已过时,即写入主服务器可能不会同步到从服务器。
然而,有时我们并不关心过时,而是希望通过从从属服务器读取(可能过时的)数据来扩展读取操作。
为了实现这一点,您可以向slave发送READONLY
命令。然后,该连接上的任何仅就绪操作都将由从属服务器提供服务,并且不会重定向到其主服务器。
如果要关闭READONLY
模式,可以发送READWRITE
命令,告诉从机将读取请求重定向到主机。
注:
无论从机处于READONLY
模式还是READWRITE
模式,都不能向从机写入,即写入操作总是重定向到主机。
更新:slave-serve-stale-data
和slave-read-only
配置与READONLY
和READWRITE
命令无关。slave-serve-stale-data
控制从服务器在失去与主服务器的连接或复制仍在进行时,是应将请求重定向到主服务器,还是仅返回错误。slave-read-only
控制是否可以写入从机。但是,这些写入不会传播到主服务器和其他从服务器,并且在与主服务器重新同步后将被删除。
关于redis - 当redis获得slave的 key 时,为什么要重定向到master?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49061445/