須要導入兩個包。java
項目結構 |
---|
![]() |
package com.xkt.jedis; import java.util.Set; import org.junit.After; import org.junit.Before; import org.junit.Test; import redis.clients.jedis.Jedis; /** * @author lzx * */ public class JedisTest { private Jedis jedis = null; /** * new Jedis(host, port, timeout); * * host redis所在服務器地址 port 端口 默認6379 timeout 鏈接超時時間,默認5s * * 鏈接reids注意事項: (1)防火牆問題 (2)Ip綁定。把Redis的配置文件redis.conf裏的bind localhost(或者bind * 127.0.0.1,代表只有該主機才能訪問)註釋掉。 (3)protected-mode保護模式 若是碰到,將protected-mode改爲no便可。 */ @Before public void before() { // 一、建立客戶端Jedis jedis = new Jedis("192.168.109.3", 6379, 5); // 2.指定密碼 jedis.auth("1234"); } @After public void after() { // 關閉資源 if (null != jedis) { jedis.close(); } } /** * 測試鏈接 */ @Test public void testConn() { String pong = jedis.ping(); System.out.println(pong); } /** * 得到全部key */ @Test public void getAllKeys() { Set<String> keys = jedis.keys("*"); for (String key : keys) { System.out.println(key); } } }
鏈接reids注意事項:node
所謂的集羣,就是經過添加服務器的數量,提供相同的服務,從而讓服務器達到一個穩定、高效的狀態。redis
模型 |
---|
![]() |
這裏咱們介紹Redis-cluster集羣,由於哨兵模式當併發寫請求較大時,哨兵模式並不能緩解寫壓力。數據庫
咱們知道只有主節點才具備寫能力,那若是在一個集羣中,可以配置多個主節點,是否是就能夠緩解寫壓力了呢?這就引出了咱們的redis-cluster集羣模式。ruby
圖示 |
---|
![]() |
圖示 |
---|
![]() |
在Redis-Cluster集羣中,能夠給每個主節點添加從節點,主節點和從節點直接遵循主從模型的特性。服務器
當用戶須要處理更多讀請求的時候,添加從節點能夠擴展系統的讀性能。網絡
Redis集羣的主節點內置了相似Redis Sentinel的節點故障檢測和自動故障轉移功能,當集羣中的某個主節點下線時,集羣中的其餘在線主節點會注意到這一點,並對已下線的主節點進行故障轉移。併發
圖示 |
---|
![]() |
集羣進行故障轉移的方法和Redis Sentinel進行故障轉移的方法基本同樣,不一樣的是,在集羣裏面,故障轉移是由集羣中其餘在線的主節點負責進行的,因此集羣沒必要另外使用Redis Sentinel。分佈式
Redis-cluster分片策略,是用來解決key存儲位置的。函數
集羣將整個數據庫分爲16384個槽位slot,全部key-value數據都存儲在這些slot中的某一個上。一個slot槽位能夠存放多個數據,key的槽位計算公式爲:slot_number=crc16(key)%16384,其中crc16爲16位的循環冗餘校驗和函數。
集羣中的每一個主節點均可以處理0個至16383個槽,當16384個槽都有某個節點在負責處理時,集羣進入上線狀態,並開始處理客戶端發送的數據命令請求。
圖示 |
---|
![]() |
圖示 |
---|
![]() |
拷貝redis-3.0.0.gem至/usr/local下,執行安裝:
主節點:192.168.56.3:7001 192.168.56.3:7002 192.168.56.3:7003
從節點:192.168.56.3:7004 192.168.56.3:7005 192.168.56.3:7006
圖示 |
---|
![]() |
1>必選配置:
圖示 |
---|
![]() |
圖示 |
---|
![]() |
package com.xkt.redis.test; import java.util.HashSet; import java.util.Set; import redis.clients.jedis.HostAndPort; import redis.clients.jedis.JedisCluster; /** * @author lzx * */ public class Test { public static void main(String[] args) { //鏈接jediscluster客戶端 String host ="192.168.109.3"; Set<HostAndPort> nodes =new HashSet<>(); nodes.add(new HostAndPort(host, 7001)); nodes.add(new HostAndPort(host, 7002)); nodes.add(new HostAndPort(host, 7003)); nodes.add(new HostAndPort(host, 7004)); nodes.add(new HostAndPort(host, 7005)); nodes.add(new HostAndPort(host, 7006)); JedisCluster cluster = new JedisCluster(nodes); String name = cluster.hget("user:id:1", "name"); System.out.println(name); cluster.close(); } }