redis -master/slave(主/從模式)

來源:互聯網
上載者:User

類似MySQL的master-slave模式一樣,redis的master-slave可以提升系統的可用性,master節點寫入cache後,會自動同步到slave上。

環境:

master node: 10.6.144.155:7030

slave node: 10.6.144.156:7031

 

一、配置

僅需要在slave node上修改配置:

找到slaveof這行,參考下面的修改(填上master node的Ip和連接埠就完事了)

slaveof 10.6.144.155 7030

另外注意下 slave-read-only yes 這行,這表示slave唯讀不寫,也是推薦設定

 

二、驗證

啟動master/slave這二台機器上的redis,在master上加一個快取項目


然後在slave上取出該快取項目


取到了,說明master上的cache自動複製到slave節點了

三、redisson用戶端使用

 1     @Test 2     public void testRedisson() { 3         Config config = new Config(); 4  5         config.useMasterSlaveConnection().setMasterAddress("10.6.144.155:7030") 6                 .addSlaveAddress("10.6.144.156:7031"); 7  8         Redisson redisson = Redisson.create(config); 9 10         String key = "test";11         12         RBucket<String> myObj = redisson.getBucket(key);13         if (myObj!=null){14             myObj.delete();15         }16         17         myObj.set("hello World");18         19         System.out.println(myObj.get());//斷點停在這裡,然後down掉master,不影響讀取20         21         myObj.set("new Value");//恢複master,down掉slave,不影響寫入22         23         System.out.println(myObj.get());//再恢複slave,down掉master,可正常讀取24         25         myObj.set("can not write to master");//master已down掉,無法寫入26         27         System.out.println(myObj.get());//恢複master,down掉slave,無法讀取28         29         30         redisson.shutdown();31         32         33     }

註:經實際測試,redisson用戶端在set寫操作時,串連的是master node,get讀操作時串連的是slave,而且遇到操作失敗,會同步阻塞後面的處理(一直等待,直到逾時)

即:set操作時,至少要有一台可串連的master,get操作時,至少要有一台可串連的slave

四、Jedis用戶端使用

 1     @Test 2     public void testJedis() throws InterruptedException { 3          4         Jedis jedisMaster = new Jedis("10.6.144.155", 7030); 5          6         String key = "a"; 7          8         String a= jedisMaster.get(key); 9         if (a!=null){10             jedisMaster.del(key);11         }12         jedisMaster.set(key, "hi!");//向master寫入13         jedisMaster.close();14         15 16         Jedis jedisSlave = new Jedis("10.6.144.156", 7031);// 串連slave17         18         jedisSlave.slaveof("10.6.144.155", 7030);// 指定master        19 20         System.out.println(jedisSlave.get(key));21         22         jedisSlave.slaveofNoOne();//master如果down掛,可以用代碼將slave提升為master(即:可寫)23 24         jedisSlave.set(key, "new");25 26         System.out.println(jedisSlave.get(key));27 28         jedisSlave.close();29 30     }

 

後記:個人感覺master-slave模式作用有限,因為從二種client的測試結果看,在沒有其它監控機制的前提下,無論是master或slave掛掉,都需要手動調整配置或修改代碼,才能保證讀/寫繼續正常工作,理想情況是master掛掉,最好slave中能自動(無需人工幹預)選出一台充當master繼續服務。redis 的cluster功能,目前尚處於beta階段,估計不久的將來,等cluster功能正式發布後,可以通過custer功能搭建redis叢集。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.