不會用SpringBoot連線Redis,那就趕緊看這篇

華為雲開發者社群發表於2022-02-10
摘要:如何通過springboot來整合操作Redis。

本文分享自華為雲社群《SpringBoot連線Redis操作教程》,作者: 灰小猿。

今天來和大家分享一個如何通過springboot來整合操作Redis。

一、SpringBoot連線Redis

springboot連線Redis時需要在pom檔案中匯入所需的jar包依賴,依賴如下:

  <!-- 加入jedis依賴 -->
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.9.0</version>
        </dependency>

(1)使用Jedis類直接連線Redis伺服器

在springboot環境下連線redis的方法有很多,首先最簡單的就是直接通過jedis類來連線,

jedis類就相當於是redis的客戶端表示。

連線方法如下:

 /**
     * redis連線測試01
     */
    @Test
    public void redisTest01() {
        //連線本地的 Redis 服務
        Jedis jedis = new Jedis("localhost");
        // 如果 Redis 服務設定了密碼,需要用下面這行程式碼輸入密碼
        // jedis.auth("123456"); 
        System.out.println("連線成功");
        //檢視服務是否執行
        System.out.println("服務正在執行: "+jedis.ping());
    }

執行後結果:

不會用SpringBoot連線Redis,那就趕緊看這篇

通過這種方式進行連線時,springboot會自動的去本地尋找redis伺服器進行連線,如果沒有找到那麼就會報錯,

如果你去閱讀jedis的底層原始碼,你會發現Jedis類有多種構造方法,
常用的幾個是

使用預設地址和埠

//不傳值,那麼使用預設的127.0.0.1地址,6379埠就訪問
public Jedis()

使用指定地址和預設埠

//只傳入目的地址,那麼使用指定的地址和預設的埠號去訪問
public Jedis(String host)

使用指定地址和埠

//傳入目的地址和埠號,那麼使用指定的地址和埠號去訪問
public Jedis(String host, int port)

(2)通過配置檔案進行連線

在springboot中,當然是可以通過配置檔案的形式來設定各種連線引數了,Redis也是一樣的,

在yml檔案中進行如下配置:

注意:這是沒有使用連線池的,如果使用連線池,需要在下邊增加配置,關於使用連線池的可以繼續往下看。

##redis配置資訊
spring:
  redis:
    database: 0 #redis資料庫索引,預設為0
    host: 127.0.0.1 #redis伺服器地址
    port: 6379 #redis伺服器連線埠
    password: #redis伺服器連線密碼,預設為null
    timeout: 5000 #redis連線超時時間

通過配置檔案來進行配置之後,我們就可以使用springboot中的一個工具類來操作Redis的操作了,springboot會自動讀取配置檔案中的配置資訊,然後通過該配置資訊去連線Redis伺服器,springboot中提供操作Redis的工具類有兩個,分別是:StringRedisTemplate和RedisTemplate,

StringRedisTemplate和RedisTemplate的區別如下

  • 在進行序列化時,RedisTemplate使用的是 JdkSerializationRedisSerializer,而StringRedisTemplate使用的是StringRedisSerializer
  • StringRedisTemplate繼承了RedisTemplate<String,String>,而RedisTemplate 定義為 RedisTemplate<K, V>,所有StringRedisTemplate就限定了K,V為String型別的

相同處體現在他們對Redis的操作上,

RedisTemplate和StringRedisSerializer都定義了五種對Redis的操作,分別對應這Redis中的五種資料型別。

redisTemplate.opsForValue();  //操作字串
redisTemplate.opsForHash();   //操作hash
redisTemplate.opsForList();   //操作list
redisTemplate.opsForSet();    //操作set
redisTemplate.opsForZSet();   //操作有序set

那麼在使用的時候,這兩個類應該如何選擇呢?

如果你的redis資料庫裡面本來存的是字串資料,或者你要存取的資料就是字串型別資料的時候,那麼你就使用StringRedisTemplate即可,

》但是如果你的資料是複雜的物件型別,而取出的時候又不想做任何的資料轉換,直接從Redis裡面取出一個物件,那麼使用RedisTemplate是更好的選擇。

接下來我以StringRedisSerializer為例子,來給大家演示一下使用StringRedisSerializer操作Redis的方法,

   /**
     * springboot主從連線測試,
     * 使用springRedisTemplate操作
     */
    @Test
    public void redisTest06() {
//        操作字元型
        stringRedisTemplate.opsForValue().set("test06","Test06");
        System.out.println(stringRedisTemplate.opsForValue().get("test06"));

//        設定key的過期時間,30秒
        stringRedisTemplate.expire("test06", 30 * 1000, TimeUnit.MILLISECONDS);

//        根據key獲取過期時間
        Long test06ExpireTime = stringRedisTemplate.getExpire("test06");
        System.out.println("根據key獲取過期時間:" + test06ExpireTime);

//        根據key獲取過期時間,並且換算成指定單位
        Long test06ExpireTimeToUnit = stringRedisTemplate.getExpire("test06", TimeUnit.SECONDS);
        System.out.println("根據key獲取過期時間,並且換算成指定單位:" + test06ExpireTimeToUnit);

//        檢查key是否存在,返回布林型別
        Boolean test06IsExist = stringRedisTemplate.hasKey("test06");
        System.out.println("檢查key是否存在,返回布林型別:" + test06IsExist);

    }

在上面的操作中,有一點關於獲取和設定key過期時間的操作,當時在操作的時候對其進行了一下探究,在這裡分享給大家

stringRedisTemplate中獲取過期時間的getExpire()方法的說明

如果最開始沒有設定過期時間,那麼就返回-1,資料在沒有達到Redis資料最大限額的情況下會一直存在.

如果設定了過期時間,但是資料還未過期,就返回剩餘時間,如果到了過期時間,那麼資料會被刪除
如果資料被刪除或者不存在,那麼就返回-2.

 

點選關注,第一時間瞭解華為雲新鮮技術~

相關文章