Spring Boot 中使用 Redis:從入門到實戰

🌟 前言

歡迎來到我的技術小宇宙!🌌 這里不僅是我記錄技術點滴的后花園,也是我分享學習心得和項目經驗的樂園。📚 無論你是技術小白還是資深大牛,這里總有一些內容能觸動你的好奇心。🔍

  • 🤖 洛可可白:個人主頁

  • 🔥 個人專欄:?前端技術 ?后端技術

  • 🏠 個人博客:洛可可白博客

  • 🐱 代碼獲取:bestwishes0203

  • 📷 封面壁紙:洛可可白wallpaper

在這里插入圖片描述

這里寫自定義目錄標題

  • Spring Boot 中使用 Redis:從入門到實戰
    • 一、添加 Redis 依賴
    • 二、配置 Redis 連接
      • application.properties 示例
      • application.yml 示例
    • 三、自定義 Redis 配置(可選)
      • Redis 配置類
    • 四、使用 `RedisTemplate` 進行基本操作
      • 1\. 增刪改查操作
        • RedisService.java
      • 2\. 創建臨時數據并自動刪除
        • RedisService.java(臨時數據)
      • 3\. 測試 Redis 功能
        • RedisController.java
    • 五、運行應用
    • 六、高級功能
      • 1\. 設置數據過期時間
        • 示例代碼
      • 2\. 使用 Redis 的其他數據結構
        • 示例代碼(使用列表)
    • 七、總結
    • 參考資料

Spring Boot 中使用 Redis:從入門到實戰

在現代的 Spring Boot 應用程序中,Redis 是一種常用的高性能鍵值存儲系統,廣泛用于緩存、消息隊列、分布式鎖等場景。本文將詳細介紹如何在 Spring Boot 項目中集成 Redis,并實現基本的增刪改查操作、設置數據過期時間、創建臨時數據等常用功能。

一、添加 Redis 依賴

在 Spring Boot 項目中,集成 Redis 非常簡單。首先,你需要在項目的 pom.xml 文件中添加以下依賴:

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

這個依賴會自動引入 Spring Data Redis 的相關功能,并配置默認的 Redis 客戶端連接。

如果你需要使用 Lettuce 作為 Redis 客戶端(默認客戶端),可以顯式添加 Lettuce 依賴:

<dependency><groupId>io.lettuce.core</groupId><artifactId>lettuce-core</artifactId>
</dependency>

二、配置 Redis 連接

application.propertiesapplication.yml 文件中配置 Redis 的連接信息。

application.properties 示例

spring.redis.host=localhost
spring.redis.port=6379
spring.redis.password=  # 如果設置了密碼
spring.redis.database=0  # 數據庫索引,默認為 0

application.yml 示例

spring:redis:host: localhostport: 6379password:  # 如果設置了密碼database: 0  # 數據庫索引,默認為 0

三、自定義 Redis 配置(可選)

如果你需要自定義 RedisTemplate 的序列化方式,可以創建一個配置類。默認情況下,Spring Data Redis 使用 JdkSerializationRedisSerializer 對象序列化器,這可能導致一些問題,例如存儲的鍵值對是二進制格式,難以直接查看。因此,推薦使用 StringRedisSerializer

Redis 配置類

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;@Configuration
public class RedisConfig {@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {RedisTemplate<String, Object> template = new RedisTemplate<>();template.setConnectionFactory(factory);template.setKeySerializer(new StringRedisSerializer());template.setValueSerializer(new StringRedisSerializer());return template;}
}

四、使用 RedisTemplate 進行基本操作

通過注入 RedisTemplateStringRedisTemplate,你可以輕松地操作 Redis。以下是一些常見的操作示例。

1. 增刪改查操作

RedisService.java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;import java.util.concurrent.TimeUnit;@Service
public class RedisService {@Autowiredprivate RedisTemplate<String, Object> redisTemplate;// 存儲數據public void set(String key, Object value) {redisTemplate.opsForValue().set(key, value);}// 存儲數據并設置過期時間public void setWithExpire(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);}
}

2. 創建臨時數據并自動刪除

通過設置過期時間,可以創建臨時數據。當數據過期時,Redis 會自動刪除它們。

RedisService.java(臨時數據)
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;import java.util.concurrent.TimeUnit;@Service
public class RedisService {@Autowiredprivate RedisTemplate<String, Object> redisTemplate;// 創建臨時數據并設置過期時間public void createTemporaryData(String key, Object value, long timeout, TimeUnit unit) {redisTemplate.opsForValue().set(key, value, timeout, unit);}
}

3. 測試 Redis 功能

創建一個控制器來測試 Redis 功能。

RedisController.java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;@RestController
@RequestMapping("/api/redis")
public class RedisController {@Autowiredprivate RedisService redisService;@PostMapping("/set")public String set(@RequestParam String key, @RequestParam String value) {redisService.set(key, value);return "Set successfully";}@GetMapping("/get")public Object get(@RequestParam String key) {return redisService.get(key);}@DeleteMapping("/delete")public String delete(@RequestParam String key) {redisService.delete(key);return "Deleted successfully";}@PostMapping("/setWithExpire")public String setWithExpire(@RequestParam String key, @RequestParam String value, @RequestParam long timeout) {redisService.setWithExpire(key, value, timeout, TimeUnit.SECONDS);return "Set with expire successfully";}
}

五、運行應用

確保 Redis 服務器正在運行,然后啟動 Spring Boot 應用。你可以通過以下方式測試:

  • 存儲數據:POST http://localhost:8080/api/redis/set?key=myKey&value=myValue
  • 獲取數據:GET http://localhost:8080/api/redis/get?key=myKey
  • 刪除數據:DELETE http://localhost:8080/api/redis/delete?key=myKey
  • 存儲帶過期時間的數據:POST http://localhost:8080/api/redis/setWithExpire?key=myKey&value=myValue&timeout=10

六、高級功能

1. 設置數據過期時間

在 Redis 中,可以通過設置過期時間(TTL)來讓數據在指定時間后自動刪除。這在實現緩存、會話管理等場景中非常有用。

示例代碼
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;import java.util.concurrent.TimeUnit;@Service
public class RedisService {@Autowiredprivate RedisTemplate<String, Object> redisTemplate;// 設置數據過期時間public void setWithExpire(String key, Object value, long timeout, TimeUnit unit) {redisTemplate.opsForValue().set(key, value, timeout, unit);}
}

2. 使用 Redis 的其他數據結構

Redis 不僅支持簡單的鍵值對存儲,還支持多種數據結構,如列表、集合、有序集合等。這些數據結構可以用于實現更復雜的業務邏輯。

示例代碼(使用列表)
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;import java.util.List;@Service
public class RedisService {@Autowiredprivate RedisTemplate<String, Object> redisTemplate;// 向列表中添加元素public void addToList(String key, Object value) {redisTemplate.opsForList().rightPush(key, value);}// 從列表中獲取所有元素public List<Object> getAllFromList(String key) {return redisTemplate.opsForList().range(key, 0, -1);}
}

七、總結

在 Spring Boot 項目中集成 Redis 是非常簡單的,通過 spring-boot-starter-data-redis 依賴,你可以快速實現 Redis 的基本操作和高級功能。本文介紹了如何添加 Redis 依賴、配置 Redis 連接、自定義 RedisTemplate、實現增刪改查操作、設置數據過期時間以及使用 Redis 的其他數據結構。

希望這些內容能幫助你更好地理解和使用 Redis。如果你有任何問題或建議,歡迎在評論區留言。


參考資料

  • Spring Boot 官方文檔
  • Spring Data Redis 官方文檔
  • Redis 官方文檔

如果對你有幫助,點贊👍、收藏💖、關注🔔是我更新的動力!👋🌟🚀

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

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

相關文章

hi3516cv610通過menuconfig關閉的宏記錄

hi3516cv610通過menuconfig關閉的宏記錄 defconfig為 hi3516cv610_debug_defconfig或hi3516cv610_new_defconfig 1、 變為 2、 變為 3、 變為 4、 變為 5、 變為

WebSocket 詳解:構建一個復雜的實時聊天應用

文章目錄 一、前言二、WebSocket 基礎2.1 WebSocket 與 HTTP 的區別2.2 WebSocket 的優點 三、搭建 WebSocket 服務端3.1 安裝 ws 和 redis 庫3.2 創建 WebSocket 服務端3.3 創建用戶身份驗證 四、前端實現 WebSocket 客戶端4.1 創建 Vue 3 項目4.2 實現 WebSocket 連接和用戶注…

【JavaEE進階】Spring AOP入門

歡迎關注個人主頁&#xff1a;逸狼 創造不易&#xff0c;可以點點贊嗎 如有錯誤&#xff0c;歡迎指出~ AOP是Spring框架的第??核?(第??核?是 IoC) 什么是AOP&#xff1f; ? AspectOrientedProgramming&#xff08;?向切?編程&#xff09; 什么是?向切?編程呢? 切…

算法思想之雙指針(一)

歡迎拜訪&#xff1a;霧里看山-CSDN博客 本篇主題&#xff1a;算法思想之雙指針(一) 發布時間&#xff1a;2025.4.4 隸屬專欄&#xff1a;算法 目錄 雙指針算法介紹對撞指針&#xff1a;快慢指針&#xff1a; 例題移動零題目鏈接題目描述算法思路代碼實現 復寫零題目鏈接題目描…

【11408學習記錄】英語寫作黃金模板+語法全解:用FTC數據泄漏案掌握書信結構與長難句拆解(附思維導圖)

2025.04.04 英語寫作書信寫作第一段私人信件公務信函 語法總結——簡單句簡單句的核心&#xff1a;謂語動詞的變化詞性的拓展限定詞 形容詞與副詞介詞短語 成分的擴展同位語插入語 非謂語動詞 每日一句詞匯 第一步&#xff1a;辨別第二步&#xff1a;斷開第三步&#xff1a;簡化…

手機顯示5GA圖標的條件

最近有星友問在什么情況下才能顯示5G-A&#xff1f;雖然這個我也不知道&#xff0c;但是我有幾個運營商的5G終端白皮書&#xff0c;從上面就可以找到答案。 如上是幾個運營商顯示5G-A的條件&#xff0c;基本上考慮的都是3CC的情況&#xff0c;聯通還有考慮200M CA 2CC的場景&am…

網絡:華為數通HCIA學習:IP路由基礎

華為HCIA學習 IP路由基礎路由協議或路由種類以及對應路由的優先級按工作區域分類&#xff1a;按工作機制及算法分類&#xff1a;路由的優先級路由器選擇最優路由的順序是什么? 前言自治系統LAN和廣播域路由選路IP路由表路由度量建立路由表最長匹配原則路由器轉發數據包總結 IP…

Docker 鏡像相關的基本操作

一、Docker 鏡像基本操作 1. 查找鏡像 命令&#xff1a; docker search <鏡像名稱> 示例&#xff1a;查找 CentOS 鏡像&#xff1a; docker search centos 命令解釋&#xff1a; 默認從 Docker Hub 官方倉庫上搜索鏡像。搜索結果包含多個列&#xff1a; NAME&…

Linux文件特殊權限管理及進程和線程

acl 權限優先級 擁有者 > 特殊指定用戶 > 權限多的組 >權限少的組 > 其他 mask閾值 mask是能夠賦予指定用戶權限的最大閥值 當設定完畢文件的acl列表之后用chmod縮小了文件擁有組的權力 mask會發生變化 恢復&#xff1a; setfacl -m m: 權限 :rwx 文件/…

NVIDIA AgentIQ 詳細介紹

NVIDIA AgentIQ 詳細介紹 1. 引言 NVIDIA AgentIQ 是一個靈活的庫&#xff0c;旨在將企業代理&#xff08;無論使用何種框架&#xff09;與各種數據源和工具無縫集成。通過將代理、工具和代理工作流視為簡單的函數調用&#xff0c;AgentIQ 實現了真正的可組合性&#xff1a;一…

算法設計與分析5(動態規劃)

動態規劃的基本思想 將一個問題劃分為多個不獨立的子問題&#xff0c;這些子問題在求解過程中可能會有些數據進行了重復計算。我們可以把計算過的數據保存起來&#xff0c;當下次遇到同樣的數據計算時&#xff0c;就可以查表直接得到答案&#xff0c;而不是再次計算 動態規劃…

怎么理解量子比特模型,遷移到量子計算機開始編程

怎么理解量子比特模型&#xff0c;遷移到量子計算機開始編程 視頻鏈接&#xff1a; 好的現在是2025年的3月最后一天,3月31號,今天我們討論的話題是量子編程,也就是在量子計算機上,使用特定的語言進行軟件開發。當然我們要討論的,不是,量子編程的某一門語言的技術細節,而是考慮…

使用Expo框架開發APP——詳細教程

在移動應用開發日益普及的今天&#xff0c;跨平臺開發工具越來越受到開發者青睞。Expo 是基于 React Native 的一整套工具和服務&#xff0c;它能夠大幅降低原生開發的門檻&#xff0c;讓開發者只需關注業務邏輯和界面實現&#xff0c;而不用糾結于復雜的原生配置。本文將從零開…

windows技術基礎知識

NT架構 NT 就是new techonology 的英文單詞縮寫&#xff0c;是微軟1993年推出操作系統的重大升級&#xff0c;如內存管理&#xff0c;安全機制&#xff0c;多任務&#xff0c;多線程支持。在此之前操作系統都是基于MS-DOS上面的圖形化界面&#xff0c;只有有限的內存管理和多任…

迪杰斯特拉+二分+優先隊列+拓撲+堆優化(奶牛航線Cowroute、架設電話線dd、路障Roadblocks、奶牛交通Traffic)

原文地址 https://fmcraft.top/index.php/Programming/2025040402.html 主要算法 迪杰斯特拉Dijkstra 題目列表 P1&#xff1a;奶牛航線Cowroute 題目描述 題目描述 Bessie已經厭倦了農場冬天的寒冷氣候&#xff0c;她決定坐飛機去更溫暖的地方去度假。不幸的是&#xf…

#Liunx內存管理# 在32bit Linux內核中,用戶空間和內核空間的比例通常是3:1,可以修改成2:2嗎?

在32位Linux內核中&#xff0c;用戶空間和內核空間的3:1默認比例可以修改為2:2&#xff0c;但需要權衡實際需求和潛在影響。以下是具體分析&#xff1a; 一、修改可行性 1.技術實現 通過內核啟動參數調整虛擬地址空間劃分&#xff0c;例如在GRUB配置中添加mem2G參數&#xff0c…

JAVA:使用 Curator 進行 ZooKeeper 操作的技術指南

1、簡述 Apache Curator 是一個基于 ZooKeeper 的 Java 客戶端庫&#xff0c;它極大地簡化了使用 ZooKeeper 的開發工作。Curator 提供了高層次的 API&#xff0c;封裝了很多復雜的 ZooKeeper 操作&#xff0c;例如連接管理、分布式鎖、Leader 選舉等。 在分布式系統中&#…

Julia語言的測試覆蓋率

Julia語言的測試覆蓋率探討 引言 在現代軟件開發中&#xff0c;測試是確保軟件質量的重要環節。隨著軟件的復雜度不斷增加&#xff0c;測試覆蓋率作為衡量測試質量的一個重要指標&#xff0c;受到了越來越多開發者的關注。Julia語言作為一種高性能的動態編程語言&#xff0c;…

【萬字總結】前端全方位性能優化指南(八)——Webpack 6調優、模塊聯邦升級、Tree Shaking突破

構建工具深度優化——從機械配置到智能工程革命 當Webpack配置項突破2000行、Node進程內存耗盡告警時,傳統構建優化已觸及工具鏈的物理極限:Babel轉譯耗時占比超60%、跨項目模塊復用催生冗余構建、Tree Shaking誤刪關鍵代碼引發線上事故……構建流程正從「工程問題」演變為「…

使用MCP服務器實現AI任務完成通知:讓Cursor更智能

0. 簡介 在使用AI工具進行長時間任務時&#xff0c;常常需要等待結果。MCP&#xff08;Model Context Protocol&#xff09;服務器"mcp_server_notify"提供了一個優雅的解決方案&#xff0c;讓AI在完成任務后通過系統通知提醒你。本文將介紹如何在Cursor中配置和使用…