[轉載] 使用Redis的Java客戶端Jedis

林堯彬發表於2020-04-04

轉載自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!

轉載於:https://www.cnblogs.com/scott19820130/p/4671845.html

相關文章