redis3.0 集群實戰3 - java編程實戰


本文主要描述使用jedis進行redis-cluster操作

 

jedis

jedis是redis官方推薦使用的java redis客戶端,github地址為,https://github.com/xetorthio/jedis,本文使用jedis進行redis集群的操作。 
jedis從2.3.0版本后開始支持redis cluster,不過看官方的released文檔(https://github.com/xetorthio/jedis/releases)在2.3.0版本后的每個版本都會修復一些cluster相關的bug,基本上在2.6.3版本后,才開始沒有cluster相關的bug,所以建議jedis版本至少大於2.6.3.目前最新版本是2.7.2.

maven:

<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.7.2</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
 

hello world

jedis官方推薦的helloworld:

Set<HostAndPort> jedisClusterNodes = new HashSet<HostAndPort>();
//Jedis Cluster will attempt to discover cluster nodes automatically
jedisClusterNodes.add(new HostAndPort("127.0.0.1", 7379));
JedisCluster jc = new JedisCluster(jedisClusterNodes);
jc.set("foo", "bar");
String value = jc.get("foo");

實際使用:

private void genClusterNode() {
    clusterNodes = new HashSet<HostAndPort>();
    clusterNodes.add(new HostAndPort("192.168.137.10", 7000));
    clusterNodes.add(new HostAndPort("192.168.137.10", 7001));
    clusterNodes.add(new HostAndPort("192.168.137.10", 7002));
    clusterNodes.add(new HostAndPort("192.168.137.10", 7003));
    clusterNodes.add(new HostAndPort("192.168.137.10", 7004));
    clusterNodes.add(new HostAndPort("192.168.137.10", 7005));
}

private void genJedisConfig() {
    config = new JedisPoolConfig();
    config.setMaxTotal(1000);
    config.setMaxIdle(100);
    config.setTestOnBorrow(true);
}

public void clusterInit() {
    genClusterNode();
    genJedisConfig();
    jedisCluster = new JedisCluster(clusterNodes, 5000, config);
}

private void clusterSetKey(String key, String value) {
    jedisCluster.set(key, value);
}
 

解讀

JedisCluster是jedis封裝的關於redis cluster操作的class。 
JedisCluster里主要有兩個成員變量:maxRedirections和connectionHandler。

maxRedirections: 
    - 重試次數,在執行失敗后,進行的重試次數,默認是5,
connectionHandler:
    - cluster里面的連接管理者
    - 包括JedisClusterInfoCache,里面會緩存nodes和slots的信息,同時對於各個nodes和slots會緩存一個JedisPool

因此在調用RedisCluster對象時,直接使用JedisCluster對象即可,比如在調用JedisCluster.set時:

- JedisCluster會從connectionHandler基於key找出對應的SLOTS和NODES,並找出對應的JedisPool對象
- 從JedisPool對象中找出可用的Jedis實例,執行Jedis對應的set操作

同時在new JedisCluster的時候,還可以傳入timeout參數,這里的timeout表示從redis-server讀取數據的超時時間,默認的是2s,當數據量比較大的時候,可以考慮增大timeout。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM