这是原博客链接:http://blog.youkuaiyun.com/a60782885/article/details/70232240
但是数据库显然单点是不够的,那么如何用redis数据库做缓存集群呢?我们今天就来研究一下。
Redis 支持 Master-Slave(主从)模式,Redis Server 可以设置为另一个 Redis Server 的主机(从机),从机定期从主机拿数据。特殊的,一个从机同样可以设置为一个 Redis Server 的主机,这样一来 Master-Slave 的分布看起来就是一个有向无环图 DAG,如此形成 Redis Server 集群,无论是主机还是从机都是 Redis Server,都可以提供服务。
在配置后,主机Master可负责读写服务,从机slave只负责读。Redis 提高这种配置方式,为的是让其支持数据的弱一致性,即最终一致性。在业务中,选择强一致性还是弱一致性,应该取决于具体的业务需求,像微博,完全可以使用弱一致性模型;像淘宝,可以选用强一致性模型。
原理简述:
Redis主从复制可以根据是否是全量分为全量同步和增量同步。
全量同步:
Redis全量复制一般发生在Slave初始化阶段,这时Slave需要将Master上的所有数据都复制一份。
增量同步:
Redis增量复制是指Slave初始化后开始正常工作时主服务器发生的写操作同步到从服务器的过程。
增量复制的过程主要是主服务器每执行一个写命令就会向从服务器发送相同的写命令,从服务器接收并执行收到的写命令。
了解了大概结构和原理之后,我们就开始动手吧?如何实现redis主从呢?
首先进入redis目录,找到redis的配置文件。linux下是redis.conf。window下是redis.windows.conf
将这个文件拷贝一份。进行如下修改:
修改端口:
- port 6380
在这个#slaveof <masterip> <masterport>注释下添加slaveof,表示这个是某个server的从服务器。
- slaveof <masterip> <masterport>
- slaveof 127.0.0.1 6379
进行如下测试:
首先启动master,再启动从服务器salve。
可以看到他们两个打印的日志,主从配置成功。
打开两个新的terminal。
分别运行对应的客户端:
可以看到,在master中set的key能在从服务器slave中get到value。并且slave默认是只读的,不能对缓存进行修改。当然也可以对这个选项进行修改(slave-read-only no),修改slave的权限。
多层主从也是一样的。
比如master->slave1->slave2。
只需要再执行一个salve2,修改salveof作为slave1的从服务器就可以做到了。
需要注意的是,一个redis服务器成为一个服务器的salve,如果配置了多条salveof,以最后一条为准。
配置了redis集群,就可以大大的减轻缓存服务器的负担,只有写操作需要对master进行,其他的读操作都可以从salve中进行读取,而我们知道,大部分的数据库操作都是读操作。