Redis專案實戰(三) Jedis使用

2022-07-05 16:48:16 字數 3049 閱讀 1564

pom配置:

redis.clients

jedis

3.0.1

jarcompile

1)連線單機版

public

void testjedis() throws

exception

2) 連線單機版使用連線池

public

void testjedispool() throws

exception

3) 連線集群版

public

void testjediscluster() throws

exception

4)jedispool初始化配置:

private

static

final

int taskcount = 50; //

併發任務

private

static

final

int batchsize = 10; //

pipeline大小

private

static

final

int cmdcount = 1000;//

每個任務處理命令數

private

static

final

boolean usepipeline = true;

jedispoolconfig poolconfig = new

jedispoolconfig();

poolconfig.setmaxactive(200);

poolconfig.setmaxidle(100);

poolconfig.setmaxwait(2000);

poolconfig.settestonborrow(

false

);poolconfig.settestonreturn(

false

);jedispool = new jedispool(poolconfig, host, port);

5)jedis 訊息發布與訂閱api

5.1)訊息訂閱

public

void

subscribechannal());

// 方式2

訂閱得到資訊在lister的onmessage(...)方法中進行處理 (普通訂閱方式)

"foo", "watson");

}

//初始化訂閱時候的處理

@override

public

void onsubscribe(string channel, int

subscribedchannels)

//初始化按表示式的方式訂閱時候的處理

@override

public

void onpsubscribe(string pattern, int

subscribedchannels)

@override

//取得按表示式的方式訂閱的訊息後的處理

public

void

onpmessage(string pattern, string channel, string message)

//取得訂閱的訊息後的處理

public

void

onmessage(string channel, string message)

5.2)訊息發布

發布訊息只用呼叫jedis的publish(...)方法即可。

jedis jedis =ru.getconnection(); //獲取乙個jedis物件,自行封裝工具類 

jedis.publish("hello_foo", "bar123");

6) 管道

原理:redis客戶端與redis伺服器之間使用tcp協議進行連線,管道(pipeline)可以一次性傳送多條命令並在執行完後一次性將結果返回,pipeline通過減少客戶端與redis的通訊次數來實現降低往返延時時間,而且pipeline 實現的原理是佇列,而佇列的原理是時先進先出,這樣就保證資料的順序性。 

缺陷:需要注意到是用 pipeline方式打包命令傳送,redis必須在處理完所有命令前先快取起所有命令的處理結果。打包的命令越多,快取消耗記憶體也越多。所以並不是打包的命令越多越好。具體多少合適需要根據具體情況測試。

備註:pipeline 的預設的同步的個數為53個,也就是說arges中累加到53條資料時會把資料提交;

7)擴充套件:

由於redis-cluster的hash分片,jediscluster物件原生並不支援pipline管道和keys方法。然而,實際專案中在追求效能以及考慮到redis集群版和單機版相容或切換問題,往往需要支援這些方法,通過整理網上的部分資料,現給出以下思路,具體方法可參考github示例

管道pipline實現思路:

redis集群規範: redis 集群的鍵空間被分割為16384個槽(slot), 集群的最大節點數量也是16384個。每個主節點都負責處理16384個雜湊槽的其中一部分。當乙個集群處於「穩定」(stable)狀態時(群沒有在執行重配置(reconfiguration)操作), 每個雜湊槽都只由乙個節點進行處理(hash slot的分配是由crc16演算法計算)。

故, 1.根據要插入的key知道這個key所對應的槽的號碼(jedisclustercrc16.getslot(key)), 再通過這個槽的號碼從集群中找到對應jedis(通過每個節點的slot分布,就知道了哪些key應該在哪些節點上)。

2.相同槽位的key,使用同乙個jedis.pipeline去執行命令。

3.合併此次pipeline所有的response返回。

keys實現思路:

迴圈集群中所有的節點(分別獲取j對應的client物件),然後每個節點做keys,最後再加到一塊返回。

備註:每次執行前需要重新整理以獲取最新的slot分布。

Jedis連線Redis三種方式

1 單機模式 private string addr 192.168.1.1 private string port 6236 private string key key private jedis jedis new jedis addr,port jedis獲取到的redis資料在jedis裡...

Jedis連線操作redis

redis是系統中最常見的快取應用,jedis可以產生執行緒安全的例項,用於連線 操作redis。string redis host redis host int redis port redis port jedispoolconfig config new jedispoolconfig 配置最...

使用Jedis操作redis

連線redis redis的預設埠是6379 jedis jedis new jedis localhost 6379 驗證密碼,如果沒有設定密碼這段 省略 jedis.auth password jedis.connect 連線 jedis.disconnect 斷開連線 setkeys jedi...