jedis基本介紹

在多線程下使用Jedisredis

在不一樣的線程中使用相同的Jedis實例會發生奇怪的錯誤。可是建立太多的實現也很差由於這意味着會創建不少sokcet鏈接,也會致使奇怪的錯誤 發生。單一Jedis實例不是線程安全的。爲了不這些問題,可使用JedisPool, JedisPool是一個線程安全的網絡鏈接池。能夠用JedisPool建立一些可靠Jedis實例,能夠從池中拿到Jedis的實例。這種方式能夠解 決那些問題而且會實現高效的性能.安全

初始化JedisPool 網絡

1 JedisPool pool = new JedisPool(new JedisPoolConfig(), "localhost");

能夠以靜態的方式處理以上代碼,它是線程安全的.多線程

JedisPoolConfig包含了許多有用的redis指定的鏈接池的默認參數。好比,若是一個鏈接300秒內沒有任何的返回Jedis將關閉這個鏈接.性能

能夠這樣使用線程

01 Jedis jedis = pool.getResource();
02 try {
03   //隨便作一些對於redis的操做
04   jedis.set("foo", "bar");
05   String foobar = jedis.get("foo");
06   jedis.zadd("sose", 0, "car"); jedis.zadd("sose", 0, "bike");
07   Set<String> sose = jedis.zrange("sose", 0, -1);
08 } finally {
09   //這裏很重要,一旦拿到的jedis實例使用完畢,必需要返還給池中
10   pool.returnResource(jedis);
11 }
12 //程序關閉時,須要調用關閉方法
13 pool.destroy();

設置主/從分佈code

啓用同步複製server

Redis主要爲了主/從分佈而構建。這意味着"write"請求必需要指向"master", "master"會同步複製改變的內容到"slave". "read"請求能夠(不是必須的)被指向"slave",緩解"master"的讀寫壓力.get

能夠按如下的步驟使用"master". 爲了啓用同步複製,有兩個方式去告訴"slave"將"slaveOf"到一個給定的"master":同步

1.在redis server的config文件(redis.conf)指明

2.在拿到的jedis實例中調用"slaveOf"方法並指定IP和端口

1 jedis.slaveOf("192.168.1.35", 6379);

注意:"slave"也是一個redis server,也能夠接收"write"請求並不會報錯,可是改變不會被同步複製,因此若是弄反了jedis的實例則一些操做會被覆蓋.

禁用同步複製/master失敗後,提高slave

若是"master"down掉,能夠提高"slave"成爲新的"master".首先試着禁用同步複製離線的"master",若是有幾個"slave",啓用同步複製其他的"slave"到新的"master".

1 slave1jedis.slaveofNoOne();
2 slave2jedis.slaveOf("192.168.1.36", 6379);
相關文章
相關標籤/搜索