當併發量達到必定程度時,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。架構