2023-07-03

SpringBoot 與 Redis 相遇

章節

CH1. SpringBoot 與 Redis 相遇
CH2. SpringBoot 與 Redis 相遇 - Jackson 序列化設定
CH3. SpringBoot 與 Redis 相遇 - 分散式鎖
CH4. SpringBoot 與 Redis 相遇 - 超賣情境

前言

因為行動裝置的普及化,人手一支手機皆可上網進行網站操作,造就現代網站的流量日漸升高。在訪問次數如此平凡的情況下,對於資料庫造成莫大的負擔,為了解決這個問題,我們通常會採用 Cache 來讓我們加速訪問,減少資料庫的負擔,而最常見的 Cache Server 也就是我們常聽到的 Redis。

本文將會簡單地介紹 Redis 以及如何與 SpringBoot 3 進行整合。

What is Redis

Redis 是一套開源且高性能的資料庫系統,資料通常存放於記憶體中,也提供持久化機制。而 Redis 主要使用 Kev-Value 資料結構來進行資料儲存,所以我們也可以說它是一種 NoSQL。

Maven dependencies

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-pool2</artifactId>
</dependency>

在這邊可以注意一下,我們除了引用 spring-boot-starter-data-redis 也一併使用了 commons-pool,原因在於接下來我們的設定有使用到 pool。

除了上述以外,大家可以看到我們並沒有使用到 jedis,因為目前 SpringDataRedis 預設是使用 lettuce 作為預設使用的 library。

Yaml Configuration

spring:
  application:
    name: redis-example
  data:
    redis:
      host: 192.168.145.10
      port: 6379
      database: 0
      timeout: 1000
      lettuce:
        pool:
          min-idle: 0
          max-idle: 150
          max-wait: -1
          max-active: 150

在這邊我們簡單的介紹 pool 做了那些設定。

  • min-idle: Connection Pool 最小的空閒連接數,只有在正數時有效。
  • max-idle: Connection Pool 最大空閒連接數,若為負數代表不設限。
  • max-wait: 當 Connection Pool 數量不足時,會有一個等待時間,若超出這個時間將會拋出錯誤,若為負數則不設限。
  • max-active: Connection Pool 最大能夠分配的數量,若為負數則不設限。

Test

@Autowired
private RedisTemplate<String, String> redisTemplate;

@Test
public void testRedisSet() {
    // 嘗試設定一個 Key 為 Hello,Value 為 World 的資料
    redisTemplate.opsForValue().set("Hello", "World");

    // 嘗試取得 Key 為 Hello 的資料,並驗證其 Value 是否為 World
    assertEquals(redisTemplate.opsForValue().get("Hello"), "World");
}

在預設下,我們可以使用 RedisTemplate 來進行測試,主要動作為設定一個 Key 為 Hello,Value 為 World 的資料,並且測試其數值是否正確。

結論

至此我們簡單地完成了 Redis 與 SpringBoot 的整合,並且嘗試的操作,後面幾篇文章我們將會更加進一步的了解 Redis。