標籤:
轉載自http://aofengblog.blog.163.com/blog/static/631702120147298317919/
在實際的項目開發中,各種語言是使用Redis的用戶端庫來與Redis互動。針對Java語言,Redis官方推薦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) );
運行上述代碼,控制台輸出:
set指令執行結果:OK
get指令執行結果:Hello, Redis!
使用串連池
此方式適用於僅使用單個Redis執行個體的情境。
// 產生串連池配置資訊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();
運行上述代碼,控制台輸出:
set指令執行結果:OK
get指令執行結果:Hello, Redis!
使用串連池+分布式
在規模較大的系統中,往往會有多個Redis執行個體做負載平衡。並且還實現主從備份,當主執行個體發生故障時,切換至從執行個體提供服務。
類似於Memcached的用戶端,Jedis也提供了用戶端分布式操作的方式,採用一致性雜湊演算法。
// 產生多機串連資訊列表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!
[轉載] 使用Redis的Java用戶端Jedis