整合Redis

整合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>

除了 spring-boot-starter-data-redis 外,還添加了 commons-pool2 依賴,是因為需要使用到連接池。

配置屬性

只需要在 application.yaml | properties 中配置如下常用的基本屬性即可:

spring:data:redis:# 連接地址host: "localhost"# 端口port: 6379# 數據庫database: 0# 用戶名,如果有# username:# 密碼,如果有# password:# 連接超時connect-timeout: 5s# 讀超時timeout: 5s# Lettuce 客戶端的配置lettuce:# 連接池配置pool:# 最小空閑連接min-idle: 0# 最大空閑連接max-idle: 8# 最大活躍連接max-active: 8# 從連接池獲取連接 最大超時時間,小于等于0則表示不會超時max-wait: -1ms

注意,如果使用的是 spring boot 2.x,上述配置的命名空間應該是 spring.redis 而不是 spring.data.redis

自定義 RedisTemplate

如果基本的 StringRedisTemplate 不能滿足需求,你也可以自定義 RedisTemplate 實現。

例如,想要自定義一個 JsonRedisTemplate,用于把任意 Java 對象序列化為 json 數據存儲到 Redis,并且也能夠把 Redis 中的 json 數據反序列化為任意 Java 對象。

import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.stereotype.Component;import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;/*** 自定義一個 JsonRedisTemplate* 用于把任意 Java 對象序列化為 json 數據存儲到 Redis,并且也能夠把 Redis 中的 json 數據反序列化為任意 Java 對象*/
@Component
public class JsonRedisTemplate extends RedisTemplate<String, Object> {public JsonRedisTemplate(RedisConnectionFactory redisConnectionFactory) {// 構造函數注入 RedisConnectionFactory,設置到父類super.setConnectionFactory(redisConnectionFactory);// 使用 Jackson 提供的通用 SerializerGenericJackson2JsonRedisSerializer serializer = new GenericJackson2JsonRedisSerializer();serializer.configure(mapper -> {// 如果涉及到對 java.time 類型的序列化,反序列化那么需要注冊 JavaTimeModulemapper.registerModule(new JavaTimeModule());});// String 類型的 key/value 序列化super.setKeySerializer(StringRedisSerializer.UTF_8);super.setValueSerializer(serializer);// Hash 類型的 key/value 序列化super.setHashKeySerializer(StringRedisSerializer.UTF_8);super.setHashValueSerializer(serializer);}
}

首先,繼承 RedisTemplate<K,V>,泛型 K 表示 Redis Key 類型,一般都是 String,泛型 V 表示 Redis Value 類型,既然我們需要的是一個通用的 JSON Template,所以設置為 Object,Value 值可以是任意對象。

在構造函數中注入 RedisConnectionFactory 設置到父類,「這是必須的」

然后創建GenericJackson2JsonRedisSerializer 實例,它是基于 Jackson 的 RedisSerializer 實現,用于任意 Java 對象和 JSON 字符串之間的序列化/反序列化。使用該實例作為普通 Value 和 Hash Value 的序列化/反序列化器。注意,因為序列化的對象可能包含了 java.time 類型的日期字段,如:LocalTimeLocalDate 以及 LocalDateTime,所以需要注冊 JavaTimeModule

測試

import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import com.keepc.springredis.config.JsonRedisTemplate;@SpringBootTest
class SpringRedisApplicationTests {static final Logger logger = LoggerFactory.getLogger(SpringRedisApplicationTests.class);// 注入 JsonRedisTemplate@AutowiredJsonRedisTemplate jsonRedisTemplate;@SuppressWarnings("unchecked")@Testpublic void test() {// MapMap<String, Object> map = new HashMap<>();map.put("title", "spring redis");map.put("url", "https://springdoc.cn");map.put("createAt", LocalDateTime.now());// 設置 key/valuethis.jsonRedisTemplate.opsForValue().set("key1-string", map, Duration.ofMinutes(5));// 讀取 key/valuemap = (Map<String, Object>) this.jsonRedisTemplate.opsForValue().get("key1-string");logger.info("map={}", map);// 設置 Hash Valuethis.jsonRedisTemplate.opsForHash().put("key2-hash", "app", map);// 讀取 Hash Valuemap = (Map<String, Object>) this.jsonRedisTemplate.opsForHash().get("key2-hash", "app");logger.info("map={}", map);}}

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

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

相關文章

Vue3——Watch偵聽器

目錄 手動指定監聽對象 偵聽ref對象 偵聽ref對象中的某個屬性 reactive寫法 watchEffect 自動偵聽 多源偵聽 一次性偵聽器 watch 是?個?于觀察和響應Vue響應式系統中數據變化的?法。它允許你指定?個數據源&#xff08;可以是 響應式引?、計算屬性、組件的屬性等&#xf…

1、數據結構與算法(Python版-啃書)-緒論

1.1 計算機問題求解 一般而言&#xff0c;人們需要的不是解決一個具體問題的程序&#xff0c;而是解決一類問題的程序。 對于求平方根這樣的簡單問題&#xff0c;人們希望的也不是專用于求某個數(例如2)的平方根的函數&#xff0c;而是能求任何數的平方根的函數。 用計算機解…

微信小程序之將輪播圖設計為組件

在components文件夾上點右鍵&#xff0c;新建component&#xff0c;命名為swiper 然后將我們之前的代碼都拷貝到對應文件中&#xff0c; 然后我們的頁面要引用這個組件&#xff0c; 在pages\index\index.json中引入&#xff1a; { "usingComponents": {"van…

【視頻】解決FFmpeg將RTSP轉RTMP流時,出現的卡死、出錯等問題

【視頻】郭老二博文之:圖像視頻匯總 1、簡述 如果不修改圖像內容,可以使用FFmpeg命令來將RTSP轉RTMP流。 SRS視頻服務器就是這么干的,它沒有使用FFmpeg接口,而是直接使用FFmpeg命令來轉流。 但是在使用中,約到了一些問題,比如轉流時卡死、轉流出錯等等,下面描述怎么解…

報銷單業務筆記

文章目錄 業務點業務點-對公對私業務點-多系統標志 特殊業務入參入參報文 出參出參報文中間的邏輯多對多關系 其他應該是整體成功還是可以部分成功這種多對多關多關系有沒有優雅的判斷方式 報銷單是個通用場景&#xff0c;有通用邏輯&#xff0c;在此基礎上進行適度定制&#x…

25軟考【軟件評測師】:10天極限沖刺攻略(附知識點解析+沖刺攻略)

距離2025上半年“軟件評測師”考試已經只剩最后一周多了&#xff0c;還沒有準備好的小伙伴趕緊行動起來。為了幫助大家更好的沖刺學習&#xff0c;特此提供一份考前沖刺攻略。本指南包括考情分析、沖刺攻略兩個部分&#xff0c;可以參考此指南進行最后的復習要領&#xff0c;相…

python 的 ?uv、pip? 和 ?conda? 對比和技術選型

你好&#xff0c;我是 shengjk1&#xff0c;多年大廠經驗&#xff0c;努力構建 通俗易懂的、好玩的編程語言教程。 歡迎關注&#xff01;你會有如下收益&#xff1a; 了解大廠經驗擁有和大廠相匹配的技術等 希望看什么&#xff0c;評論或者私信告訴我&#xff01; 文章目錄 一…

Python logging模塊使用指南

Python 的 logging 模塊是一個靈活且強大的日志記錄工具&#xff0c;廣泛應用于應用程序的調試、運行監控和問題排查。它提供了豐富的功能&#xff0c;包括多級日志記錄、多種輸出方式、靈活的格式配置等。以下是詳細介紹&#xff1a; 一、為什么使用 logging 模塊&#xff1f;…

開發技術.前端開發相關問題

第一部分 響應式布局 1. 幾個布局單位概念 PX: px像素&#xff08;Pixel&#xff09; 相對長度單位。像素px是相對于顯示器屏幕分辨率而言的。 PX特點 1. IE無法調整那些使用px作為單位的字體大小&#xff1b; 2. 國外的大部分網站能夠調整的原因在于其使用了em或rem作為字體…

1. Go 語言環境安裝

&#x1f451; 博主簡介&#xff1a;高級開發工程師 &#x1f463; 出沒地點&#xff1a;北京 &#x1f48a; 人生目標&#xff1a;自由 ——————————————————————————————————————————— 版權聲明&#xff1a;本文為原創文章&#xf…

WPF自定義控件開發全指南:多內容切換與動畫集成

WPF自定義控件開發全指南&#xff1a;多內容切換與動畫集成 一、控件基礎架構設計1.1 選擇控件基類1.2 定義關鍵屬性 二、動畫系統集成2.1 淡入淡出動畫實現2.2 滑動動畫實現 三、視覺狀態管理四、完整使用示例4.1 XAML聲明4.2 動畫觸發邏輯 五、擴展與優化5.1 性能優化建議5.2…

數據結構 -- 順序查找和折半查找

查找的基本概念 基本概念 查找&#xff1a;在數據集合中尋找滿足某種條件的數據元素的過程 查找表&#xff08;查找結構&#xff09;&#xff1a;用于查找的數據集合稱為查找表&#xff0c;它由同一類型的數據結構元素&#xff08;或記錄&#xff09;組成 關鍵字&#xff1…

汽車功能安全--TC3xx MBIST設計要點

英飛凌針對硬件故障的自測&#xff0c;提供了四種機制&#xff1a;PBIST、LBIST、MONBIST和MBIST。 LBIST和MONBIST我們已經聊過了&#xff0c;今天就快速介紹下MBIST。 MBIST&#xff0c;全程Memory Built-in Self Test&#xff0c;用于檢測SRAM數據單元的完整性。 在26262…

openpi 入門教程

系列文章目錄 目錄 系列文章目錄 前言 一、運行要求 二、安裝 三、模型檢查點 3.1 基礎模型 3.2 微調模型 四、運行預訓練模型的推理 五、在自己的數據上微調基礎模型 5.1. 將數據轉換為 LeRobot 數據集 5.3. 啟動策略服務器并運行推理 5.4 更多示例 六、故障排除…

java加強 -Collection集合

集合是一種容器&#xff0c;類似于數組&#xff0c;但集合的大小可變&#xff0c;開發中也非常常用。Collection代表單列集合&#xff0c;每個元素&#xff08;數據&#xff09;只包含1個值。Collection集合分為兩類&#xff0c;List集合與set集合。 特點 List系列集合&#…

深入理解ThingsBoard的Actor模型

1、ThingsBoard系統中定義了哪些Actor ? ThingsBoard Actor 創建機制與作用對照表: Actor 類型 何時創建 由誰創建 是否緩存 作用描述 SystemActor 系統啟動時 DefaultActorService / ActorSystem ? 是 ★ ThingsBoard 平臺服務級別管理器:負責創建所有的Actor AppActor

WPS一旦打開,就會修改默認打開方式,怎么解?

目錄 前言 解決方法 結語 前言 電腦上同時存在WPS和微軟的Office全家桶&#xff0c;但是我更喜歡用Office全家桶。前幾天剛在設置改過來&#xff0c;忘記更改pdf文件打開默認應用。結果沒過幾天&#xff0c;不小心用WPS打開pdf文件時候&#xff0c;給我把默認設置全改回去了…

深度學習中--模型調試與可視化

第一部分&#xff1a;損失函數與準確率的監控&#xff08;Loss / Accuracy Curve&#xff09; 1. 為什么要監控 Loss 與 Accuracy&#xff1f; Loss 是模型優化的依據&#xff0c;但它可能下降了 Accuracy 反而沒變&#xff08;過擬合信號&#xff09; Accuracy 才是評估效果的…

中間件-RocketMQ

RocketMQ 基本架構消息模型消費者消費消息模式順序消息機制延遲消息批量消息事務消息消息重試最佳實踐 基本架構 nameServer: 維護broker列表信息&#xff0c;客戶端連接時只需要連接nameServer。可配置成集群。 broker&#xff1a;broker分為master和slave&#xff0c;master負…

anaconda3如何切換虛擬環境

在 Anaconda3 中切換虛擬環境可以通過 命令行 或 Anaconda Navigator 圖形界面實現。以下是詳細步驟&#xff1a; 方法1&#xff1a;通過命令行切換&#xff08;推薦&#xff09; 1. 查看所有虛擬環境 conda env list # 或 conda info --envs 輸出示例&#xff1a; base …