Spring Boot 集成 Redis 實戰教程

前言

在高并發、大數據量的應用場景中,緩存是提升系統性能的關鍵技術。Redis 憑借其卓越的讀寫性能、豐富的數據結構和高可用性,成為開發者常用的緩存工具。本教程將嚴格依據Spring 官方文檔與Redis 官方文檔,詳細介紹 Spring Boot 與 Redis 的集成步驟。

一、創建 Spring Boot 項目

Spring Initializr 是創建 Spring Boot 項目的官方推薦方式,通過它能快速生成包含 Redis 依賴的項目骨架:

  1. 訪問Spring Initializr 官網;

  2. 在頁面中填寫項目基本信息,如Group(組織標識符)、Artifact(項目名稱);

  3. Dependencies(依賴)搜索框中輸入Redis,選擇Spring Data Redis

  4. 點擊Generate生成項目壓縮包,解壓后使用 IDE 打開。

也可通過 IDE(如 IntelliJ IDEA)的New Project向導,選擇Spring Initializr,按上述步驟完成項目創建。

二、引入 Redis 依賴

根據 Spring Boot 官方文檔,spring-boot-starter-data-redis依賴整合了 Redis 操作所需的核心功能。在pom.xml文件中,默認情況下創建項目時已包含該依賴,若缺失,可手動添加:

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

該依賴默認使用Lettuce作為 Redis 客戶端,Lettuce是基于 Netty 的響應式客戶端,在多線程環境下表現出色。若需使用傳統的Jedis客戶端,參考官方文檔,可添加如下配置:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><exclusions><exclusion><groupId>io.lettuce</groupId><artifactId>lettuce-core</artifactId></exclusion></exclusions>
</dependency>
<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId>
</dependency>

三、配置 Redis 連接信息

Spring Boot 官方文檔提供了多種配置 Redis 連接的方式,最常用的是在配置文件中設置。在application.propertiesapplication.yml文件中,配置示例如下:

application.properties;

spring.redis.host=localhost
spring.redis.port=6379
spring.redis.password=
spring.redis.database=0
spring.redis.timeout=3000
# 連接池配置(可選)
spring.redis.lettuce.pool.max-idle=8
spring.redis.lettuce.pool.min-idle=0
spring.redis.lettuce.pool.max-active=8
spring.redis.lettuce.pool.max-wait=-1ms

application.yml;

spring:redis:host: localhostport: 6379password:database: 0timeout: 3000lettuce:pool:max-idle: 8min-idle: 0max-active: 8max-wait: -1ms

配置說明:

  • spring.redis.host:Redis 服務器主機地址;

  • spring.redis.port:Redis 服務器端口號;

  • spring.redis.password:Redis 訪問密碼;

  • spring.redis.database:使用的 Redis 數據庫編號(0 - 15);

  • spring.redis.timeout:連接超時時間;

  • 連接池相關配置(以Lettuce為例):用于控制連接池的大小和行為,提升連接管理效率。

四、編寫 Redis 操作代碼

1. 創建 Redis 配置類

參考 Spring 官方文檔,創建配置類以定制RedisTemplate。以Lettuce客戶端為例:


@Configurationpublic class RedisConfig {@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {RedisTemplate<String, Object> template = new RedisTemplate<>();template.setConnectionFactory(redisConnectionFactory);// 鍵使用String序列化template.setKeySerializer(new StringRedisSerializer());template.setHashKeySerializer(new StringRedisSerializer());// 值使用JSON序列化template.setValueSerializer(new GenericJackson2JsonRedisSerializer());template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());return template;}
}

上述代碼配置了RedisTemplate,通過合理設置序列化方式,方便對不同類型數據進行存儲和讀取。

2. 編寫 Redis 操作 Service;

封裝 Redis 常用操作,方便業務代碼調用:

@Servicepublic class RedisService {private final RedisTemplate<String, Object> redisTemplate;public RedisService(RedisTemplate<String, Object> redisTemplate) {this.redisTemplate = redisTemplate;}// 存儲數據public void set(String key, Object value) {redisTemplate.opsForValue().set(key, value);}// 存儲數據并設置過期時間public void set(String key, Object value, long timeout, TimeUnit unit) {redisTemplate.opsForValue().set(key, value, timeout, unit);}// 獲取數據public Object get(String key) {return redisTemplate.opsForValue().get(key);}// 刪除數據public void delete(String key) {redisTemplate.delete(key);}}

3. 測試 Redis 操作

使用 JUnit 5 編寫測試類驗證 Redis 操作:

@SpringBootTestpublic class RedisTest {@Autowiredprivate RedisService redisService;@Testpublic void testRedis() {// 存儲數據redisService.set("testKey", "testValue");// 獲取數據Object value = redisService.get("testKey");System.out.println("獲取到的值:" + value);// 刪除數據redisService.delete("testKey");Object deletedValue = redisService.get("testKey");System.out.println("刪除后獲取到的值:" + deletedValue);}
}

運行測試,若控制臺輸出預期結果,表明 Redis 集成成功。

五、使用 Redis 實現緩存

Spring 官方文檔提供了強大的緩存抽象機制,結合 Redis 可輕松實現緩存功能。

1. 啟用緩存

在 Spring Boot 主類上添加@EnableCaching注解:

@SpringBootApplication
@EnableCaching
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}

2. 編寫 Service 方法并添加緩存注解

以用戶查詢為例:

@Servicepublic class UserService {// 模擬從數據庫查詢用戶public User getUserFromDatabase(String userId) {// 實際查詢數據庫邏輯return new User(userId, "John Doe");}// 使用@Cacheable緩存方法結果@Cacheable(value = "users", key = "#userId")public User getUser(String userId) {return getUserFromDatabase(userId);}
}

@Cacheable注解會根據valuekey定義的規則,自動管理緩存的讀寫,當方法再次被調用時,若緩存存在則直接返回緩存數據,提升系統響應速度。

總結

通過以上步驟,依據官方文檔完成了 Spring Boot 與 Redis 的集成及緩存實現。實際開發中,還可探索 Redis 的發布訂閱、哨兵模式、集群模式等高級功能,進一步挖掘 Redis 潛力。若在實踐過程中有疑問,歡迎交流討論。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/84887.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/84887.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/84887.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

龍蜥開發者說:我的龍蜥開源之旅 | 第 32 期

「龍蜥開發者說」第 32 期來了&#xff01;開發者與開源社區相輔相成&#xff0c;相互成就&#xff0c;這些個人在龍蜥社區的使用心得、實踐總結和技術成長經歷都是寶貴的&#xff0c;我們希望在這里讓更多人看見技術的力量。本期故事&#xff0c;我們邀請了龍蜥社區開發者潘玨…

在mac上安裝sh腳本文件

要將 jd-gui.sh 腳本轉換為在 macOS ARM 系統上帶有自定義圖標的可點擊運行的程序&#xff0c;你可以通過創建一個應用程序包&#xff08;.app&#xff09;來實現。以下是詳細步驟&#xff1a; 步驟 1&#xff1a;創建應用程序包目錄結構 應用程序包實際上是一個特殊的目錄&a…

用bilibili一個講座視頻,生成一本科普書籍

用bilibili一個講座視頻,生成一本科普書籍 一、功能介紹1.1 智能文本處理1.2 知識提煉與結構化1.3 專業知識普及1.4 自動化書籍生成1,5 大規模處理能力二、技術特點三、應用意義3.1 教育領域3.2 研究領域3.3 內容創作3.4 企業應用四、創新價值五、使用場景示例六、操作步驟6.1 …

黑馬教程強化day3-1

目錄 一、File1.定義&#xff1a;2.創建File類的對象3.File提供的判斷文件類型、獲取文件信息功能4.File提供的創建的方法5.File類刪除文件的功能6.File提供的遍歷文件夾的方法代碼演示 二、遞歸&#xff08;了解遞歸算法&#xff0c;以便實現多級遍歷找文件&#xff09;1.定義…

milvus 總結

1. milvus 的默認 admin 角色賬號 root 的密碼 為 Milvus 2. 最開始使用命令&#xff1a; docker-compose -f milvus-standalone-docker-compose.yml up -d 啟動 milvus 后&#xff0c;使用 attu 登錄 Milvus 是不需要輸入賬號/密碼的&#xff0c;可以使用如下方式開啟 mi…

基于docker技術的單主機環境模擬測試批量客戶端

EX. 任務背景 近期接到一個需求是在一個高性能服務器上&#xff0c;模擬啟動多個待測試客戶端的場景&#xff0c;但這個客戶端程序有點特殊&#xff0c;設置了守護模式&#xff0c;并且需要管理員權限會監控系統的/dev/mem節點&#xff0c;單個環境中只能啟動一個。 當前的測…

windows上用vnc viewer 能連接mac,不能連ubuntu

如果 VNC Viewer 可以連接 macOS&#xff0c;但無法連接 Ubuntu&#xff0c;通常是由于 Ubuntu 上的 VNC 服務配置問題或網絡限制導致的。以下是逐步排查和解決方案&#xff1a; 1. 確認 Ubuntu 上已安裝并運行 VNC 服務 (1) 檢查是否安裝了 VNC 服務器 Ubuntu 常用的 VNC 服…

Electron-vite【實戰】MD 編輯器 -- 編輯區(含工具條、自定義右鍵快捷菜單、快捷鍵編輯、拖拽打開文件等)

最終效果 頁面 src/renderer/src/App.vue <div class"editorPanel"><div class"btnBox"><divv-for"(config, key) in actionDic":key"key"class"btnItem":title"config.label"click"config.a…

沒有寶塔面板的服務器上的WordPress網站打包下載到本地?

在服務器上部署的wordpress博客站&#xff0c;沒有寶塔面板&#xff0c;怎么將服務器上的wordpress打包下載到本地&#xff1f; 作者: 曉北斗NorSnow 曉北斗動態視覺設計師&#xff0c;嵐度視覺工作室執行人&#xff1b;主要從事展廳視頻制作、圖形工作站銷售、AIGC研究&#…

Atcoder Beginner Contest 410 題解報告

零、前言 經過七七四十九天的分別&#xff0c;本期 ABC 題解又和大家見面啦&#xff01; 經過七周的奮勇殺題&#xff0c;我終于達成了三個小心愿&#xff1a; 不吃罰時AK上金排名 100 100 100 以內 且 Rated&#xff08;悲催的是&#xff0c;我 ABC400 排名兩位數但沒Rate…

pyspark非安裝使用graphframes

pyspark版本3.1.3 需要文件 graphframes-0.8.2-spark3.1-s_2.12.jarspark-graphx_2.12-3.1.3.jar從 https://github.com/microsoft/adb2spark/raw/main/graphframes-0.8.2-py3-none-any.whl 下載graphframes-0.8.2-py3-none-any.whl。下載后把whl后綴改成zip&#xff0c;解壓…

[Linux入門] Linux磁盤管理與文件系統

目錄 Linux磁盤與文件系統管理詳解&#xff1a;從基礎到實踐 ??一、磁盤基礎簡述?? 1????硬盤類型??&#xff1a; ?2??機械硬盤結構??&#xff1a; 3????磁盤容量計算??&#xff1a; 公式&#xff1a;磁盤容量磁頭數柱面數每磁道扇區數每扇區字節數 …

【Flutter】性能優化總結

【Flutter】性能優化總結 Flutter 性能優化是提升應用流暢度、響應速度和用戶體驗的關鍵。可以從以下幾個方面進行優化&#xff1a; 一、UI 構建與布局優化 1、避免不必要的重建 使用 const 構造函數&#xff1a;如 const Text(Hello)&#xff0c;可以減少 Widget 重建。使用…

5、ZYNQ PL 點燈--流水燈

目錄 1、 概述 2 、硬件電路 3、 新建 VIVADO 工程 4、 添加工程文件 6、編寫流水燈功能的Verilog代碼 7 、添加管腳約束文件 8、 RTL 仿真 8.1 添加仿真測試源碼 8.2 仿真結果 9、 編譯并且產生 bit 文件 10、 下載程序 11、實驗結果 ?編輯12、總結 1、 概述 本…

HTML5 浮動

1. 常見網頁布局 1-3-1布局 1-2-1布局 2. 標準文檔流 3. display屬性? display&#xff1a; block 給span元素設置成block display&#xff1a; inline 給div元素設置成inline display&#xff1a; inline-block 給div和span元素設置為inline-block display&#xff1a; no…

若依使用RedisCache需要注意的事項

存入redis對象的時候會帶一個type字段&#xff0c;此處需要注意 存入方&#xff1a; 此處需要注意&#xff0c;存入redis的時候會帶一個type&#xff0c;也就是類的路徑名 redisCache.setCacheObject(screenPlayQueueName, userDemondDto,userDemondDto.getPlayDuration().in…

【STM32的通用定時器CR1的CKD[1:0]: 時鐘分頻因子 (Clock division)】

在 STM32 的通用定時器&#xff08;如 TIM2, TIM3, TIM4, TIM5 等&#xff09;中&#xff0c;CR1 (Control Register 1) 寄存器中的 CKD[1:0] (Clock division) 位域是一個與抗干擾和數字濾波相關的設置&#xff0c;它并不直接影響定時器計數器 (CNT) 的計數頻率&#xff08;計…

渲染學進階內容——機械動力的渲染系統(2)

Flywheel代碼 這篇來研究一下實例 InstanceHandle 接口深度解析 接口核心作用 InstanceHandle 是 Flywheel 渲染引擎中的 GPU實例句柄 接口,它提供了對底層渲染實例的直接控制能力。這個接口是**實例化渲染(Instanced Rendering)**系統的核心操作接口,與之前討論的 Vis…

Redis:極速緩存與數據結構存儲揭秘

Redis —— 這個強大又靈活的 開源、內存中的數據結構存儲系統。它常被用作數據庫、緩存、消息代理和流處理引擎。 核心特點 (為什么它這么受歡迎&#xff1f;)&#xff1a; 內存存儲 (In-Memory): 數據主要存儲在 RAM 中&#xff0c;讀寫操作直接在內存中進行。核心優勢&…

vulnyx Diff3r3ntS3c writeup

信息收集 arp-scan nmap 這里默認的話是只有80端口的&#xff0c;這個22端口是我拿到root后開的 獲取userFlag 直接上web看看 掃個目錄 把網頁拉到最下面可以看到一個文件上傳點 我們嘗試上傳一個php文件 失敗了&#xff0c;那xxx呢 上傳成功了&#xff0c;看來后端的后綴名…