使用Redis的Java客戶端Jedis

Jedis提供了多種操做方式:單機單鏈接方式、單機鏈接池方式、多機分佈式+鏈接池方式。算法

預備

jedis-2.5.2
commons-pool2-2.2.jar負載均衡

使用單鏈接

此方式僅建議用於開發環境作調試用。分佈式

// 建立鏈接
String host = "192.168.56.102"; int port = 6379; Jedis client = new Jedis(host, port);
// 執行set指令 String result = client.set("key-string", "Hello, Redis!"); System.out.println( String.format("set指令執行結果:%s", result) );
// 執行get指令 String value = client.get("key-string"); System.out.println( String.format("get指令執行結果:%s", value) );

運行上述代碼,控制檯輸出:spa

set指令執行結果:OK              
get指令執行結果:Hello, Redis!
調試

使用鏈接池

此方式適用於僅使用單個Redis實例的場景。code

// 生成鏈接池配置信息 JedisPoolConfig config = new JedisPoolConfig(); config.setMaxIdle(10); config.setMaxTotal(30); config.setMaxWaitMillis(3*1000); // 在應用初始化的時候生成鏈接池 JedisPool pool = new JedisPool(config, "192.168.56.102", 6379); // 在業務操做時,從鏈接池獲取鏈接 Jedis client = pool.getResource(); try { // 執行指令 String result = client.set("key-string", "Hello, Redis!"); System.out.println( String.format("set指令執行結果:%s", result) ); String value = client.get("key-string"); System.out.println( String.format("get指令執行結果:%s", value) ); } catch (Exception e) { // TODO: handle exception } finally { // 業務操做完成,將鏈接返回給鏈接池 if (null != client) { pool.returnResource(client); } } // end of try block // 應用關閉時,釋放鏈接池資源 pool.destroy(); 

運行上述代碼,控制檯輸出:orm

set指令執行結果:OK              
get指令執行結果:Hello, Redis!blog

使用鏈接池+分佈式

在規模較大的系統中,每每會有多個Redis實例作負載均衡。而且還實現主從備份,當主實例發生故障時,切換至從實例提供服務。
相似於Memcached的客戶端,Jedis也提供了客戶端分佈式操做的方式,採用一致性哈希算法。ci

// 生成多機鏈接信息列表 List<JedisShardInfo> shards = new ArrayList<JedisShardInfo>(); shards.add( new JedisShardInfo("127.0.0.1", 6379) ); shards.add( new JedisShardInfo("192.168.56.102", 6379) ); // 生成鏈接池配置信息 JedisPoolConfig config = new JedisPoolConfig(); config.setMaxIdle(10); config.setMaxTotal(30); config.setMaxWaitMillis(3*1000); // 在應用初始化的時候生成鏈接池 ShardedJedisPool pool = new ShardedJedisPool(config, shards); // 在業務操做時,從鏈接池獲取鏈接 ShardedJedis client = pool.getResource(); try { // 執行指令 String result = client.set("key-string", "Hello, Redis!"); System.out.println( String.format("set指令執行結果:%s", result) ); String value = client.get("key-string"); System.out.println( String.format("get指令執行結果:%s", value) ); } catch (Exception e) { // TODO: handle exception } finally { // 業務操做完成,將鏈接返回給鏈接池 if (null != client) { pool.returnResource(client); } } // end of try block // 應用關閉時,釋放鏈接池資源 pool.destroy(); 

運行上述代碼,控制檯輸出:
資源

set指令執行結果:OK              get指令執行結果:Hello, Redis!

相關文章
相關標籤/搜索