rodert單排學習redis進階【白銀一】

JavaPub發表於2020-06-25

redis之白銀一

說些題外話,最近帝都疫情又嚴重,大家都身處時代洪流中,這不是個別人能左右的,希望你能保護好自己,天天開心。

[toc]

前言

宣告:參考來源網際網路,有任何爭議可以留言。站在前人的肩上,我們才能看的更遠。

前文推薦閱讀:

rodert單排學習redis入門【黑鐵】
rodert 單排學習 redis 進階【青銅】

1.Redis 客戶端

1.1.Redis Desktop Manager

使用稱手的工具,做起事來 事半功倍 ,用 redis-cli 自然不錯。我推薦一款我經常用的 Redis 視覺化工具, Redis Desktop Manager

啟動介面如下:

至於安裝方式是 一鍵安裝

官網下載地址: https://redisdesktop.com/pricing

學生和學習者可以公眾號後臺回覆:【666】,免費獲取。

2.Redis 連線池

2.2.0.連線池

池技術被廣泛使用在系統開發中,像 JDBC 連線池、執行緒池等。連連線池是建立和管理一個連線的緩衝池的技術,這些連線準備好被任何需要它們的執行緒使用。

在處理一個任務時,我們大多情況要在數毫秒級別就完成,如果重複建立、關閉資源,會佔用較長時間和大量系統資源。

  • 使用連線池優勢
  1. 減少連線建立時間

連線在系統初始化時就建立完成,需要時直接從池中取用,減少了時間開銷。

  1. 簡化的程式設計模式

當使用連線池時,每一個單獨的執行緒能夠像建立了一個自己的 JDBC 連線一樣操作。

  1. 受控的資源使用

連線池能夠控制一個模組的資源佔用率,不會讓一個模組資源佔用過高,導致整個系統崩潰。

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,白嫖原創電子書

有任何問題都可以來談談 !

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69977829/viewspace-2700625/,如需轉載,請註明出處,否則將追究法律責任。

相關文章