Cluster 中关于读写分离的特性
- Cluster 中的 slave 不接受任何读写请求;
- 对 slave 的读请求会重定向到负责 slot 的 master;
- 可以使用连接级别的命令
readonly
从 slave 中读数据;
示例
[root@redis3_0_7 config]# redis-cli -c -p 7003
127.0.0.1:7003> set hello world
OK
127.0.0.1:7003> exit
[root@redis3_0_7 config]# redis-cli -c -p 7000
127.0.0.1:7000> get hello
-> Redirected to slot [866] located at 127.0.0.1:7003
"world"
127.0.0.1:7003> exit
- 使用连接级别的命令
readonly
从 slave 中读是可以的;
[root@redis3_0_7 config]# redis-cli -c -p 7000
127.0.0.1:7000> readonly
OK
127.0.0.1:7000> get hello
"world"
在 Cluster 中实现读写分离的思路
- 会遇到非 Cluster 模式中同样的问题:复制延迟、读取过期数据、slave 故障;
自定义客户端
- 通过命令
cluster slaves {nodeId}
将所有的 slave 维护在一个池子中,然后监控这个池子,实际的实现过程是非常复杂的;
建议
- 在 Cluster 中有读写分离的需求,建议增大节点数量,不过没这个条件,就自己实现客户端;