当并发量达到必定程度时,web应用没法处理这么多请求,咱们能够用nginx作负载均衡,链接多个web应用。当数据库没法支撑的时候,咱们作主从架构,读写分离,分担数据库压力。在redis中,也能够用主历来分担压力。nginx
复制redis.windows.conf文件,修改端口,以及添加slaveof这行配置。slaveof用于指向主redis服务的ip和端口。web
port 6380 slaveof 127.0.0.1 6379
先启动master,再启动slave,能够看到slave已经同步了master的数据,在master的操做,也会同步到slave中。
master的信息,能够看到他role是master,有个从服务器slave0,以及slave0的相关信息。redis
local:0>info replication "# Replication role:master connected_slaves:1 slave0:ip=127.0.0.1,port=6380,state=online,offset=208,lag=1 master_repl_offset:208 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:2 repl_backlog_histlen:207 "
salve的信息,能够看到他的role是slave,以及master的相关信息。数据库
local6380:0>info replication "# Replication role:slave master_host:127.0.0.1 master_port:6379 master_link_status:up master_last_io_seconds_ago:2 master_sync_in_progress:0 slave_repl_offset:194 slave_priority:100 slave_read_only:1 connected_slaves:0 master_repl_offset:0 repl_backlog_active:0 repl_backlog_size:1048576 repl_backlog_first_byte_offset:0 repl_backlog_histlen:0 "
若是想让slave断开同步,则能够执行slaveof no one命令,再查看info replication时,发现他slave已经变成了master。若是继续同步,则执行slaveof 127.0.0.1 6379,此时查看info replication,role仍是slave。windows
若是master的rdb还没生成完成,此时若是有其余slave连进来,是能够直接使用这个rdb以及缓冲区的命令的,若是已经生成完,则会从新生成rdb文件。
虽然从库的数据能够做为备份,可是仍是建议开启主库的持久化。若是没有开启,当主库宕机重启后,主库的数据是空的,而从库就会把空的数据复制过来并清空自身的数据,则从库的数据也变成空的了。
以上流程是第一次同步的时候,redis也支持断点续传。master中记录了backlog,master和redis都记录了对应的offset,master根据这个offer进行同步数据,若是没有对应的offset,只能全量复制了。服务器
生成rdb时,是fork了一个子进程来处理,此时并不影响master接收客户端的命令,可是redis处理命令的效率会下降。若是咱们须要多个slave,会致使master的性能降低的严重,因此咱们能够采用一主多从的方式来作。
当从服务器1从master同步的时候,他会断开从服务器a、b、c的链接,同步完成后,再把数据以master的形式同步给服务器a、b、c。架构