在上一篇部落格中,討論了如何在Spring Boot中使用Redis實現緩衝。
但是資料庫顯然單點是不夠的,那麼如何用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中進行讀取,而我們知道,大部分的資料庫操作都是讀操作。