Spring Boot整合Redis指南

一、環境準備

在開始整合前,請確保已完成以下準備工作:

  1. 已安裝Redis服務(安裝指南)
  2. 創建好Spring Boot項目

二、添加依賴

在項目的pom.xml中添加以下依賴:

<!-- Redis核心依賴 -->
<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>

三、配置Redis連接

application.yml中配置Redis連接信息:

spring:redis:host: 127.0.0.1       # Redis服務器地址port: 6379            # Redis服務器端口password: xxxx        # Redis密碼(沒有密碼可不填)database: 0           # 使用的數據庫索引timeout: 5000         # 連接超時時間(毫秒)lettuce:pool:max-active: 8     # 連接池最大連接數max-idle: 8       # 連接池最大空閑連接數min-idle: 0       # 連接池最小空閑連接數max-wait: 1000ms  # 獲取連接最大等待時間

四、Redis操作方式

Spring Boot提供了兩種主要的Redis操作模板:

1. StringRedisTemplate(推薦)

適用于字符串類型的鍵值操作:

@RestController
@RequestMapping("/redis")
public class RedisController {@Autowiredprivate StringRedisTemplate stringRedisTemplate;@GetMapping("/set")public String set(@RequestParam String key, @RequestParam String value) {stringRedisTemplate.opsForValue().set(key, value);return "Set success";}@GetMapping("/get")public String get(@RequestParam String key) {return stringRedisTemplate.opsForValue().get(key);}
}

2. RedisTemplate(對象存儲)

適用于存儲Java對象,需要配置序列化:

@Configuration
public class RedisConfig {@Beanpublic RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory factory) {RedisTemplate<Object, Object> template = new RedisTemplate<>();template.setConnectionFactory(factory);// 使用JSON序列化器GenericJackson2JsonRedisSerializer jsonSerializer = new GenericJackson2JsonRedisSerializer();// 設置序列化方式template.setKeySerializer(new StringRedisSerializer());template.setValueSerializer(jsonSerializer);template.setHashKeySerializer(new StringRedisSerializer());template.setHashValueSerializer(jsonSerializer);template.afterPropertiesSet();return template;}
}

使用示例:

@Service
public class RedisObjectService {@Autowiredprivate RedisTemplate<Object, Object> redisTemplate;public void saveObject(String key, Object value) {redisTemplate.opsForValue().set(key, value);}public Object getObject(String key) {return redisTemplate.opsForValue().get(key);}
}

五、Redis數據結構操作

1. 字符串(String)操作

// 設置值(帶過期時間)
stringRedisTemplate.opsForValue().set("key", "value", Duration.ofMinutes(10));// 獲取值
String value = stringRedisTemplate.opsForValue().get("key");// 刪除鍵
stringRedisTemplate.delete("key");// 檢查鍵是否存在
boolean exists = stringRedisTemplate.hasKey("key");

2. 列表(List)操作

// 左側推入元素
stringRedisTemplate.opsForList().leftPush("taskList", "task1");// 右側彈出元素
String task = stringRedisTemplate.opsForList().rightPop("taskList");// 獲取列表范圍
List<String> tasks = stringRedisTemplate.opsForList().range("taskList", 0, -1);

3. 集合(Set)操作

// 添加元素
stringRedisTemplate.opsForSet().add("mySet", "A", "B", "C");// 獲取所有元素
Set<String> members = stringRedisTemplate.opsForSet().members("mySet");// 檢查元素是否存在
boolean isMember = stringRedisTemplate.opsForSet().isMember("mySet", "A");

4. 哈希(Hash)操作

// 設置哈希字段
stringRedisTemplate.opsForHash().put("user:1001", "name", "Tom");// 獲取哈希字段
String name = (String) stringRedisTemplate.opsForHash().get("user:1001", "name");// 獲取所有字段
Map<Object, Object> user = stringRedisTemplate.opsForHash().entries("user:1001");

5. 有序集合(ZSet)操作

// 添加元素
stringRedisTemplate.opsForZSet().add("ranking", "Tom", 100);// 獲取排名
Set<String> topUsers = stringRedisTemplate.opsForZSet().range("ranking", 0, 2);// 獲取元素分數
Double score = stringRedisTemplate.opsForZSet().score("ranking", "Tom");

六、最佳實踐建議

  1. 連接池配置:根據應用并發量合理配置連接池參數
  2. 鍵命名規范:使用冒號分隔的命名空間(如user:1001:profile
  3. 序列化選擇:優先使用StringRedisTemplate處理字符串,復雜對象使用JSON序列化
  4. 異常處理:添加適當的異常處理邏輯
  5. 過期時間:為緩存數據設置合理的過期時間

通過以上配置和示例,您可以在Spring Boot項目中輕松集成Redis,實現高效的數據緩存和存儲功能。

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

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

相關文章

Re-攻防世界

easyEZbaby_app Jadx 這個文件一般是窗口界面&#xff0c;點擊中間的一般就是主函數 Obj1是用戶名&#xff0c;obj2是密碼 用戶名 public boolean checkUsername(String str) { if (str ! null) { try { if (str.length() ! 0 &&…

矩陣題解——搜索二維矩陣 II【LeetCode】

240. 搜索二維矩陣 II 1.1 核心思想 問題描述&#xff1a;給定一個 m x n 的二維矩陣&#xff0c;矩陣的每一行從左到右遞增&#xff0c;每一列從上到下遞增。判斷目標值 target 是否存在于矩陣中。解決思路&#xff1a; 從矩陣的右上角&#xff08;或左下角&#xff09;開始搜…

dockerfile文件詳解之基礎語法

dockerfile文件詳解之基礎語法 一般而言 Dockerfile 可以分為4個部分 &#xff08;1&#xff09;基礎鏡像信息&#xff0c; &#xff08;2&#xff09;維護者信息 &#xff08;3&#xff09;鏡像操作命令 &#xff08;4&#xff09;啟動時執行指令 1-注釋 用 # 來進行注…

WebFuture:獨立一級域名nginx取消配置Secure屬性的問題

問題分析&#xff1a; 部分站群站點使用了獨立一級域名&#xff0c;但是前臺問卷調查等模塊無法提交&#xff0c;排查是由于主站啟用了https&#xff0c;配置了cookies的Secure屬性是true&#xff0c;但是子站的獨立一級域名沒有使用https&#xff0c;所以瀏覽器不能寫入cooki…

【網站內容安全檢測】之3:獲取所有外部域名訪問后圖像

Go語言調用Chrome瀏覽器去進行截圖的操作&#xff0c;對電腦的性能要求比較高&#xff0c;所以速度比較有限&#xff0c;但是目前來看這種方式可以最佳的去獲取網頁加載后的結果。 main.go package mainimport ("context""errors""flag""…

華曦達港股IPO遞表,AI Home生態構建智能生活新藍圖

在智能家居逐漸普及的當下&#xff0c;華曦達打造的AI Home生態為用戶提供了更智能、便捷的生活解決方案&#xff0c;在行業中展現出獨特優勢。 華曦達AI Home生態由AI Home系統平臺、AI Home基礎設施、AI Home設備以及可連接外部設備的開放式設備矩陣構成&#xff0c;是一個開…

java+vue+SpringBoo智慧農業專家遠程指導系統(程序+數據庫+報告+部署教程+答辯指導)

源代碼數據庫LW文檔&#xff08;1萬字以上&#xff09;開題報告答辯稿ppt部署教程代碼講解代碼時間修改工具 技術實現 開發語言&#xff1a;后端&#xff1a;Java 前端&#xff1a;vue框架&#xff1a;springboot數據庫&#xff1a;mysql 開發工具 JDK版本&#xff1a;JDK1.…

免費AI助手工具深度測評:Claude4本地化部署與實戰應用指南

免費AI助手工具深度測評&#xff1a;Claude4本地化部署與實戰應用指南 AI無限對話免費Rovo工具Claude4碾壓cursor和augment 前言 在AI工具日益普及的今天&#xff0c;大多數高質量的AI助手都需要付費訂閱或有使用限制。然而&#xff0c;最近發現了一款基于Claude 4的免費AI助手…

MCP瀏覽器工具:playwright、chrome-mcp

參考&#xff1a; https://github.com/microsoft/playwright-mcp https://github.com/hangwin/mcp-chrome chrome-mcp安裝需要額外安裝成瀏覽器插件 用cherrystudio v1.4.5測試 mcp配置&#xff1a; "chrome-mcp-server": {"name": "chrome-mcp-serve…

水利水電安全員考試不同等級的考試內容有哪些區別?

水利水電安全員考試一般分為企業主要負責人&#xff08;A 類&#xff09;、項目負責人&#xff08;B 類&#xff09;和專職安全生產管理人員&#xff08;C 類&#xff09;三個等級。不同等級的考試內容都包括安全生產知識和管理能力兩部分&#xff0c;但具體的側重點有所不同。…

關于USB模式的一些內容(附USB接口顏色釋義圖)

今天在處理工作中的事情的時候,突然有個產品的小伙伴來問關于USB的事情,順便給她簡單說了下。USB接口模式主要包括以下幾種:Host(主機模式)、Device(設備模式)、OTG(On-The-Go),以及較少使用的Accessory模式。以下是對這些模式的詳細說明、區別差異及應用場景: 1. H…

React中的ErrorBoundary

文章目錄 前言? 一、使用類組件實現 ErrorBoundary&#xff08;官方推薦方式&#xff09;用法示例&#xff1a; ? 二、用函數組件實現 ErrorBoundary&#xff08;借助 Hook react-error-boundary 庫&#xff09;1. 安裝 react-error-boundary2. 使用 ErrorBoundary 組件&…

歷年西北工業大學計算機保研上機真題

西北工業大學計算機保研上機真題 在線測評鏈接&#xff1a;https://pgcode.cn/problem 海倫公式求面積 題目描述 給定三角形的三條邊長 a a a, b b b, c c c&#xff0c;先判斷這三條邊是否能構成一個三角形。 如果不能構成三角形&#xff0c;輸出 N a N NaN NaN&#…

掃地機產品認證--黑名單制裁公司能否拿到美國產品準入許可(FCC認證)

掃地機產品認證–黑名單制裁公司能否拿到美國產品準入許可(FCC認證) 文章目錄 掃地機產品認證--黑名單制裁公司能否拿到美國產品準入許可(FCC認證)?? **一、核心限制規則**?? **二、企業需滿足的額外條件**??? **三、黑名單企業的應對可能性**?? **四、總結**產品認證…

數據結構復習2

第二章 線性表 2.1線性表的定義和基本操作 線性表&#xff1a;一種邏輯結構&#xff0c;表示數據元素之間的一對一線性關系&#xff08;如數組、鏈表、棧、隊列等&#xff09;。 2.1.1線性表的定義 線性表是具有相同數據類型的n(n>0)個數據元素的有限序列。 (其中n為表長…

空間轉錄組benchmark 相關 讀完scGPT spatial 和 空間單細胞基因乳房細胞數據集文章之后

文章目錄 ? 空間轉錄組測序方式總體劃分&#x1f9ec; 成像型空間轉錄組&#xff08;Imaging-based ST&#xff09;原理&#xff1a;技術代表 & 特點&#xff1a;優點&#xff1a;局限&#xff1a; &#x1f9ec; 測序型空間轉錄組&#xff08;Sequencing-based ST&#x…

清理華為云服務器內存使用率

這里寫自定義目錄標題 一、正確終止進程&#xff1a;不要帶尖括號二、看清楚誰“真吃”了內存三、臨時清掉緩存&#xff08;謹慎用&#xff09;四、長期優化1. 給系統加個 Swap2. 調整 MySQL 內存配置3. 水平&#xff0f;垂直擴容4. 告警 總結與下一步 華為云的“內存使用率”默…

Go 語言中的 package 和 go modules

1、package 的定義和導入 在任何大型軟件項目中&#xff0c;代碼的組織和管理都是至關重要的。Go 語言通過 包&#xff08;Package&#xff09; 的概念來解決這個問題&#xff0c;它不僅是代碼組織的基礎&#xff0c;也是代碼復用的關鍵。本文將深入探討 Go 語言中包的定義、規…

C#語言入門-task4 :C#語言的高級應用

C# 作為一門現代化、面向對象的編程語言&#xff0c;在企業級應用、游戲開發、移動應用、云計算等領域有著廣泛的應用。以下是 C# 語言的一些高級應用場景和技術方向&#xff1a; 一、高級語言特性與編程范式 1. 異步編程&#xff08;Async/Await&#xff09; 應用場景&…

FastAPI vs Flask vs Django:Python Web框架全面對比

Python 作為最受歡迎的編程語言之一&#xff0c;其 Web 開發生態極為豐富。FastAPI、Flask 和 Django 是當前主流的三大 Python Web 框架&#xff0c;各有千秋。本文將從架構設計、開發效率、性能表現、生態支持、適用場景等方面&#xff0c;全面對比這三大框架&#xff0c;幫助…