使用Redis的Java客戶端Jedis

轉載自:http://aofengblog.blog.163.com/blog/static/631702120147298317919/git

 

前一篇文章《Redis命令指南》講解了經過命令行的方式執行Key=>的存儲操做,在實際的項目開發中,各類語言是使用Redis的客戶端庫來與Redis交互。針對Java語言,Redis官方推薦Jedisgithub

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實例的場景。調試

// 生成鏈接池配置信息
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();

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

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

使用鏈接池+分佈式

在規模較大的系統中,每每會有多個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!

相關文章
相關標籤/搜索