redis的主從配置仍是蠻簡單的,還能夠密碼認證,保證是安全的slave。redis
能夠單機多開幾個監聽端口,部署成主從。數據庫
咱們如今所說的master-slave,其實就是master負責讀寫,slave只讀。slave其實也能夠負責寫,可是通常都默認只讀。緩存
1,什麼是主從複製。這其實就是主從的一個數據同步問題。安全
slave啓動後,就回向master發送一條同步命令(SYNC),master就會啓動一個子線程,收集全部的寫命令,產生rdb文件,而後將傳送整個數據庫文件給slave。這個過程就是全同步。此後master就會不斷的將新數據傳送給slave,這個過程就是部分同步。線程
2,當一個slave與master斷開了,可是仍然能夠接收到客戶端請求,數據怎麼辦?設計
redis默認的是仍然迴應請求,返回已存在的過期數據。看數據的用途,若是必須保證數據準確也能夠修改配置文件,返回同步錯誤的信息。內存
3,當一個slave與master恢復了聯繫,數據怎麼辦?部署
repl-backlog-size 1mb同步
redis設計了一個buffer來存儲slave斷開時同步的新數據。slave會首先嚐試從buffer中恢復數據,若是不成功,說明buffer以外丟失了部分新數據,就會從新進行全同步。ast
4,那麼發送部分同步的時候,主機怎麼知道buffer的數據能不能將slave恢復到可用狀態?
slave在與master斷開鏈接時,會嘗試保存主機一些信息。
其實slave發送的同步請求中有兩個屬性, master_runid 和 offset,master_runid 至關於主機身份驗證碼,用來驗證從機上一次鏈接的主機,offset 是全局積壓空間數據的偏移量。這個偏移量就會告訴主機我是何時丟失的數據,buffer能不能把我丟失的數據徹底恢復過來。
5,slave在全同步的時候,新產生的數據怎麼複製到slave上?
全同步的時候,master會生成rdb文件,在這個期間產生的新數據,會存到剛纔說起的那個buffer裏,待全同步結束髮送給salve。
6,主從複製的時候,客戶端發來的請求是怎樣的?
全同步其實就是持久化的rdb模式,他會新產生一個子線程去dump內存快照,並不會阻塞master進行新的讀寫操做。
7,redis怎麼保證數據的強一致性?
其實redis這類緩存自己存放的就不該該是實時性的數據,須要緩存的地方通常是不常常變或者變化以後在必定時間內不會有太大影響的數據。