rodert單排學習redis進階【白銀一】
redis之白銀一
說些題外話,最近帝都疫情又嚴重,大家都身處時代洪流中,這不是個別人能左右的,希望你能保護好自己,天天開心。
前言
聲明:參考來源互聯網,有任何爭議可以留言。站在前人的肩上,我們才能看的更遠。
前文推薦閱讀:
1.Redis 客戶端
1.1.Redis Desktop Manager
使用稱手的工具,做起事來 事半功倍
,用 redis-cli
自然不錯。我推薦一款我經常用的 Redis
可視化工具,Redis Desktop Manager
。
啟動界面如下:
至於安裝方式是 一鍵安裝
。
官網下載地址://redisdesktop.com/pricing
學生和學習者可以公眾號後台回復:【666】,免費獲取。
2.Redis 連接池
2.2.0.連接池
池技術被廣泛使用在系統開發中,像
JDBC
連接池、線程池等。連連接池是創建和管理一個連接的緩衝池的技術,這些連接準備好被任何需要它們的線程使用。
在處理一個任務時,我們大多情況要在數毫秒級別就完成,如果重複創建、關閉資源,會佔用較長時間和大量系統資源。
- 使用連接池優勢
- 減少連接創建時間
連接在系統初始化時就創建完成,需要時直接從池中取用,減少了時間開銷。
- 簡化的編程模式
當使用連接池時,每一個單獨的線程能夠像創建了一個自己的 JDBC 連接一樣操作。
- 受控的資源使用
連接池能夠控制一個模塊的資源佔用率,不會讓一個模塊資源佔用過高,導致整個系統崩潰。
2.1.Redis 連接池
2.1.1.前言引入
Redis
修鍊之連接池篇,前面講了Redis入門篇:rodert單排學習redis入門【黑鐵】、rodert 單排學習 redis 進階【青銅】,對Redis
基本數據類型的操作做了講解。
在以前沒有開源連接池時,很多人自寫連接池工具,簡單來說就是創建一個集合,存放一批連接,動態維護着。保證每個連接都是有效的。
2.1.2.Redis 連接池
本教程涉及到的一些代碼都是 Java 語言編寫。
maven
依賴,引入 pom.xml
文件
pom.xml
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.3.0</version>
</dependency>
RedisUtil.java
public final class RedisUtil {
//IP 地址
private static String ADDR = "127.0.0.1";
//端口號
private static int PORT = 6379;
//redis 服務端密碼
private static String PWD = "123456";
//可用連接實例最大數目,默認為 8,若賦值 -1,表示不被限制
private static Integer MAX_TOTAL = 1024;
//控制一個連接池最多有多少個狀態為空閑的 jedis 實例,默認值為 8
private static Integer MAX_IDLE = 200;
//等待可用連接最大的等待時間,單位 ms,默認值 -1,表示永不超時,若等待超時拋出 JedisConnectionException
private static Integer MAX_WAIT_MILLIS = 10000;
//超時
private static Integer TIMEOUT = 10000;
//在用一個 jedis 實例時,是否提前進行 validate 操作,若結果為 true 則 jedis 實例可用
private static Boolean TEST_ON_BORROW = true;
//jedis 連接池
private static JedisPool jedisPool = null;
/**
* 初始化 jedis 連接池的靜態塊,RedisPool 第一次類加載時執行,以後便不再執行
*/
static {
try {
JedisPoolConfig conf = new JedisPoolConfig();
/*
* 高版本 jedis jar 中 JedisPoolConfig 沒有 setMaxActive 和 setMaxWait 屬性,因為官方在高版本 * 中啟用了此方法,用以下兩個屬性替換
* maxActive ==> maxTotal
* maxWait ==> maxWaitMillis
*/
//設置連接實例最大數目
conf.setMaxTotal(MAX_TOTAL);
//設置最多多少空閑的 jedis 實例
conf.setMaxIdle(MAX_IDLE);
//設置等待可用連接的最大時間
conf.setMaxWaitMillis(MAX_WAIT_MILLIS);
//設置是否提前進行測試借用
conf.setTestOnBorrow(TEST_ON_BORROW);
//新建 jedis 連接池
jedisPool = new JedisPool(conf, ADDR, PORT, TIMEOUT, PWD);
}
catch (Exception e) {
e.printStackTrace();
}
}
/*
* 獲取 jedis 實例來操作數據,每次使用完要將連接返回給連接池 jedis.close()
* @return
*/
public synchronized static Jedis getRedis() {
try {
if(jedisPool != null) {
//獲取 jedis 實例
Jedis jedis = jedisPool.getResource();
return jedis;
}
else{
System.out.println("沒有找到 Jedis 連接池!");
return null;
}
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/*
* 用來回收 Jedis 對象資源,用戶需要用到此方法釋放資源,否則一直佔用資源,在新版本中,`returnResource(jedis) 將被廢棄不推薦使用,`直接調用 `jedis.close();` 歸還連接到連接池。
* @param Jedis jedis
*/
public synchronized static void returnJedis(Jedis jedis) {
try {
if(jedis != null) {
//回收 jedis 對象資源
jedisPool.returnResource(jedis);
System.out.println("Jedis 被成功回收!");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
本教程純手打,致力於最實用教程,不需要什麼獎勵,只希望多多轉發支持。 歡迎來我公眾號,希望可以結識你,也可以催更,微信搜索:JavaPub
有任何問題都可以來談談 !