Redis-Redis主从复制的疑问

Redis-Redis主从复制的疑问

甜柠檬 发布于 2017-03-17 字数 352 浏览 1040 回复 2

我们有三台redis服务器,分别是1主2从,但是两台从服务器分布在不同的机房。我们的应用程序会随机从两台从服务器读取数据,因此我们不希望出现在一台从服务器有数据而另一台没有的情况。换句话说,我们希望redis的主从之间的同步不要有延迟,两台从服务器的数据能够保持高度一致。Redis是否可以做到让主服务器推送数据到从服务器而不是从服务器到主服务器上去请求数据呢?

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

清晨说ぺ晚安 2017-07-27 2 楼

你先看看Redis的复制原理,本身就是Master发送数据给slave,只是第一次连接是Slave向Master发送同步请求,其它的都是Master发送数据:

redis主从复制的过程
当设置好slave服务器后,slave会建立和master的连接,然后发送sync命令。无论是第一次同步建立的连接还是连接断开后的重新连接,master都会启动一个后台进程,将数据库快照保存到文件中,同时master主进程会开始收集新的写命令并缓存起来。后台进程完成写文件后,master就发送文件给slave,slave将文件保存到磁盘上,然后加载到内存恢复数据库快照到slave上。接着master就会把缓存的命令转发给slave。而且后续master收到的写命令都会通过开始建立的连接发送给slave。从master到slave的同步数据的命令和从client发送的命令使用相同的协议格式。当master和slave的连接断开时slave可以自动重新建立连接。如果master同时收到多个slave发来的同步连接命令,只会使用启动一个进程来写数据库镜像,然后发送给所有slave。

甜柠檬 2017-04-16 1 楼

这个问题Reids暂时解决不了,你实际上需要的是一个分布式的CP系统,如果要满足CP,系统必然会无法达到A。CPA的详解可以自行google;很明显,Redis本身并不是一个可靠的分布式CP系统,而mongodb支持分布式CP,也就是说在写数据的时候向多个节点写,这些节点全部写成功以后系统才认为操作成功,从而达到你需要的强一致性。