redis的javaclientJedis簡單封裝

來源:互聯網
上載者:User

標籤:ssh   mod   串連   緩衝   except   idle   記憶體   obj   實現   

       經過我們團隊的一番討論,終於決定使用redis來進行我們的業務緩衝。redis會將資料緩衝到記憶體中,執行效率會非常快。同一時候非同步將資料寫入到磁碟中。進行持久化。

且redis支援主從同步,支援分布式部署,支援N多資料結構,這對於我們有著莫大的吸引力。

參見:http://blog.csdn.net/yichenlian/article/details/27207383

        我們團隊討論的焦點是在於redis的災備恢複問題。

因為redis的持久化是非同步。總會有一點時間記憶體中資料和磁碟資料不同步的情況(當然能夠設定成全然同步。那麼用redis的意義就大打折扣了)。儘管沒有找到盡善盡美的解決的方法。只是有一些網上的處理方式還是能夠接受的。

參見:http://blog.csdn.net/xiangliangyu/article/details/8165644
        隨後我使用javaclientJedis對redis相關操作進行了一些系統的簡單的封裝。使用的是jedis的分布式串連池,這樣方便於redis橫向擴充,添加高可用性。封裝思路:首先定義串連池類,封裝串連池擷取方式;對外為介面。介面定義的是redis常規操作,定義的方法基本與redis中一致,而且使用介面便於擴充;實現介面,我封裝的實作類別僅僅使用了分布式的方式(即ShardedJedis),也能夠使用別的實現方式,能夠自己擴充。


        1.擷取串連池:

簡單配置JedisPoolConfig

JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();jedisPoolConfig.setMaxTotal(maxTotal);//the max number of connectionjedisPoolConfig.setMaxIdle(maxIdle);//the max number of freejedisPoolConfig.setMaxWaitMillis(maxWaitMillis);//the longest time of waiting

設定JedisShardInfo(redis.clients.jedis.JedisShardInfo.JedisShardInfo(String host, int port))

得到ShardedJedisPool(串連池):redis.clients.jedis.ShardedJedisPool.ShardedJedisPool(GenericObjectPoolConfig poolConfig, List<JedisShardInfo> shards,Hashing algo)

這樣就得到了串連池。

          2.定義介面,簡單為上:

public interface JedisClientInterface {/** * 寫入一般的string類型的value *  * @param key * @param value */void put(String key, String value);/** * 讀取String類型的value *  * @param key * @return */String get(String key);}

          3.完畢實作類別:

public class JedisClientShardImpl implements JedisClientInterface {@Overridepublic void put(String key, String value) {boolean flag = true;ShardedJedis shardedJedis = pool.getResource();try{if(shardedJedis!=null){shardedJedis.set(key, value);}}catch(Exception e){flag = false;e.printStackTrace();}finally{if (flag){                           pool.returnResource(shardedJedis);                        }else{                           pool.returnBrokenResource(shardedJedis);                        }}}@Overridepublic String get(String key) {boolean flag = true;ShardedJedis shardedJedis = pool.getResource();try{if(shardedJedis!=null){return shardedJedis.get(key);}}catch(Exception e){flag = false;e.printStackTrace();}finally{                                              if (flag){                           pool.returnResource(shardedJedis);                        }else{                           pool.returnBrokenResource(shardedJedis);                        }               }               return null;        }}

             至此,整個封裝流程就走通了。

能夠隨意向下擴充了。

redis的javaclientJedis簡單封裝

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.