Spring Boot+Mybatis Plus 使用Redis實現二級緩存具體步驟以及代碼

下面是使用Spring Boot+Mybatis Plus和Redis實現二級緩存的具體步驟和代碼示例:

1. 首先,確保你已經添加了Spring Boot、Mybatis Plus和Redis的依賴。

2. 在Spring Boot的配置文件中添加Redis的配置,如下所示:

```yaml
spring:
? redis:
? ? host: 地址
? ? port: 端口
? ? password: 密碼
? ? database: 數據庫
? ? lettuce:
? ? ? pool:
? ? ? ? max-active: 最大連接數
? ? ? ? max-idle: 最大空閑連接數
? ? ? ? min-idle: 最小空閑連接數
? ? ? ? max-wait: 最大等待時間
```

3. 編寫一個配置類,用于配置Mybatis Plus的二級緩存和Redis的緩存管理器,如下所示:

```java
@Configuration
@MapperScan("com.example.mapper")
@EnableCaching
public class MybatisPlusConfig {

? ? @Bean
? ? public CacheManager cacheManager(RedisConnectionFactory factory) {
? ? ? ? RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
? ? ? ? ? ? ? ? .entryTtl(Duration.ofMinutes(10)) // 設置緩存過期時間
? ? ? ? ? ? ? ? .disableCachingNullValues()
? ? ? ? ? ? ? ? .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()));

? ? ? ? RedisCacheManager cacheManager = RedisCacheManager.builder(factory)
? ? ? ? ? ? ? ? .cacheDefaults(config)
? ? ? ? ? ? ? ? .build();
? ? ? ? return cacheManager;
? ? }

? ? @Bean
? ? public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
? ? ? ? RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
? ? ? ? redisTemplate.setConnectionFactory(factory);

? ? ? ? GenericJackson2JsonRedisSerializer serializer = new GenericJackson2JsonRedisSerializer();
? ? ? ? redisTemplate.setDefaultSerializer(serializer);
? ? ? ? redisTemplate.setKeySerializer(new StringRedisSerializer());
? ? ? ? redisTemplate.setValueSerializer(serializer);

? ? ? ? return redisTemplate;
? ? }
}
```

4. 在Mybatis Plus的Mapper接口中添加緩存注解,如下所示:

```java
@CacheNamespace(implementation = MybatisRedisCache.class, eviction = MybatisRedisCache.class)
public interface UserMapper extends BaseMapper<User> {

? ? @Cacheable(key = "#root.methodName + ':' + #p0")
? ? User selectById(Long id);

? ? @CachePut(key = "#root.methodName + ':' + #p0.id")
? ? int updateById(User user);

? ? @CacheEvict(key = "#root.methodName + ':' + #p0")
? ? int deleteById(Long id);
}
```

5. 編寫一個自定義的緩存實現類 MybatisRedisCache,實現Mybatis Plus的 Cache 接口,并使用 RedisTemplate 來操作 Redis,如下所示:

```java
public class MybatisRedisCache implements Cache {

? ? private final String id;
? ? private final RedisTemplate<String, Object> redisTemplate;

? ? public MybatisRedisCache(String id, RedisTemplate<String, Object> redisTemplate) {
? ? ? ? if (id == null) {
? ? ? ? ? ? throw new IllegalArgumentException("Cache instance requires an ID");
? ? ? ? }
? ? ? ? if (redisTemplate == null) {
? ? ? ? ? ? throw new IllegalArgumentException("RedisTemplate cannot be null");
? ? ? ? }
? ? ? ? this.id = id;
? ? ? ? this.redisTemplate = redisTemplate;
? ? }

? ? @Override
? ? public String getId() {
? ? ? ? return id;
? ? }

? ? @Override
? ? public void putObject(Object key, Object value) {
? ? ? ? if (value != null) {
? ? ? ? ? ? redisTemplate.opsForValue().set(getKey(key), value);
? ? ? ? }
? ? }

? ? @Override
? ? public Object getObject(Object key) {
? ? ? ? return redisTemplate.opsForValue().get(getKey(key));
? ? }

? ? @Override
? ? public Object removeObject(Object key) {
? ? ? ? String redisKey = getKey(key);
? ? ? ? Object value = redisTemplate.opsForValue().get(redisKey);
? ? ? ? redisTemplate.delete(redisKey);
? ? ? ? return value;
? ? }

? ? @Override
? ? public void clear() {
? ? ? ? redisTemplate.delete(redisTemplate.keys(getKey("*")));
? ? }

? ? @Override
? ? public int getSize() {
? ? ? ? return redisTemplate.keys(getKey("*")).size();
? ? }

? ? private String getKey(Object key) {
? ? ? ? return id + ":" + key.toString();
? ? }
}
```

以上就是使用Spring Boot+Mybatis Plus和Redis實現二級緩存的具體步驟和代碼示例。在具體的業務代碼中,通過在Mapper方法上添加緩存注解,即可實現自動緩存數據到Redis中。同時,在需要更新或刪除數據時,也會自動更新Redis中的緩存數據。

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

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

相關文章

wordpress:更新網站域名后后頁面無法訪問,頁面媒體文件異常(已解決)

WordPress 在數據庫中存儲了許多配置信息,包括網站的域名。如果更新了域名,但數據庫中的舊域名沒有更新,WordPress 將無法正確生成頁面鏈接或重定向訪問請求。 一、更新域名 在wp-config.php 文件中,添加或更新你的新域名! define(WP_HOME, http://172.18.214.195:32520…

Linux_fileio學習

參考韋東山老師教程&#xff1a;https://www.bilibili.com/video/BV1kk4y117Tu?p12 目錄 1. 文件IO函數分類2. 函數原型2.1 系統調用接口2.2 標準IO接口 3. fileio內部機制3.1 系統調用接口內部流程3.1 dup函數使用3.2 dup2函數使用 4. open file4.1 open實例4.2 open函數分析…

Cocos如何跟Android通信?

點擊上方億元程序員+關注和★星標 引言 Cocos如何跟Android通信 大家好,相信小伙伴們通過閱讀筆者前幾期的文章**《Cocos打安卓包打不出來?看看這個》,對Cocos**如何打安卓包有了一定的了解。 但是,除了把安卓包打出來,另外還有一個重要的就是要能夠調用安卓提供的Java方…

華為HCIP Datacom H12-821 卷21

1.單選題 以下關于PIM-SM中SPT切換的描述,錯誤的是哪一項? A、若所有組播流量都經過RP路由器,則RP路由器可能成為數據轉發的瓶頸 B、SPT路徑最短,轉發性能更優 C、SPT 切換完成后,組播流量依然經過 ReT 樹 D、RPT 樹可能不是組播流量轉發的最優路徑 正確答案: C 解析…

【AI原理解析】—K近鄰(KNN)原理

目錄 一、算法概述 二、算法原理 1. 數據集準備 2. 輸入新數據 3. 距離計算 4. 選擇K個最近鄰 5. 預測 三、關鍵要素 1. K值的選擇 2. 距離度量方法 3. 數據預處理 四、算法優缺點 優點 缺點 五、總結 KNN&#xff08;K-Nearest Neighbors&#xff0c;K最近鄰&a…

[教程]Gitee保姆級圖文使用教程

我們在日常的工作過程中經常會遇到&#xff0c;家里和公司資料文件同步的問題&#xff0c;以及項目開發過程中的協作問題。Git就完美的解決了這些問題&#xff0c;但是由于 Git國外服務器的原因平時網絡太慢了&#xff0c;不過還好有國內的托管平臺Gitee&#xff08;碼云&#…

「C++系列」C++ 變量類型

文章目錄 一、C 變量類型1. 基本數據類型2. 復合數據類型3. 類型修飾符 二、C 變量定義案例 1: 基本類型變量的定義和初始化案例 2: 數組的定義和使用案例 3: 結構體&#xff08;Struct&#xff09;的定義和使用案例 4: 指針的定義和使用案例 5: 類的定義和使用&#xff08;面向…

五、removeClosedPointCloud

五、removeClosedPointCloud 主要功能: removeClosedPointCloud 函數用于過濾掉點云中距離傳感器(例如激光雷達)太近的點。這些點可能會引入噪聲或不利于后續的點云處理和分析。函數通過比較每個點與傳感器之間的距離,移除那些距離小于設定閾值 minimumRange 的點。 計算…

網絡連接之隊頭阻塞!!!

一、什么是隊頭阻塞 隊頭阻塞&#xff0c;在網絡模型中簡單理解就是&#xff0c;對于隊列型的請求模型&#xff0c;如HTTP的請求-響應模型、TCP的ACK確認機制&#xff0c;都依賴得到一個具體的響應包&#xff0c;如果收不到這個響應包&#xff0c;那下一個請求就不能發&#x…

4、音視頻封裝格式---FLV

FLV FLV是一種容器封裝格式&#xff0c;是由Adobe公司發布和維護的&#xff0c;用于將視頻編碼流與音頻編碼流進行封裝。對于任意一種封裝格式&#xff0c;都有其頭部區域與數據區域&#xff0c;在FLV中&#xff0c;稱之為FLV Header與Body。 對于FLV Header&#xff0c;一個FL…

python自動移除excel文件密碼(升級v2版本)

歡迎查看第一版 https://blog.csdn.net/weixin_45631815/article/details/140013476?spm1001.2014.3001.5502 一功能改進 此版本主要改進功能有以下: 直接可以調用函數實現可以嘗試多個密碼沒有加密的文件進行保存,可以按實際業務進行改進.思路來源:java 面向對象設計模式.…

煤礦安全大模型:微調internlm2模型實現針對煤礦事故和煤礦安全知識的智能問答

煤礦安全大模型————礦途智護者 使用煤礦歷史事故案例,事故處理報告、安全規程規章制度、技術文檔、煤礦從業人員入職考試題庫等數據,微調internlm2模型實現針對煤礦事故和煤礦安全知識的智能問答。 本項目簡介: 近年來,國家對煤礦安全生產的重視程度不斷提升。為了確…

SpringBoot+mail 輕松實現各類郵件自動推送

一、簡介 在實際的項目開發過程中&#xff0c;經常需要用到郵件通知功能。例如&#xff0c;通過郵箱注冊&#xff0c;郵箱找回密碼&#xff0c;郵箱推送報表等等&#xff0c;實際的應用場景非常的多。 早期的時候&#xff0c;為了能實現郵件的自動發送功能&#xff0c;通常會…

前端期末1111

前端期末 超文本標記語言&#xff08;英語&#xff1a;HyperText Markup Language&#xff0c;簡稱&#xff1a;HTML&#xff09; body&#xff1a;在網頁文檔中&#xff0c;所有文本&#xff0c;圖像&#xff0c;音頻和視頻等代碼只能放在標簽內才能呈現給用戶。 HTML中的標…

【STM32入門教學】——串口、定時器與參考資料

機器人工程系列文章目錄 這里羅列了系列文章鏈接 概念總述 STM入門教學 還沒寫完組里急用 文章目錄 機器人工程系列文章目錄概念總述STM入門教學 前言串口串口的概念cubemxkeil5實物實驗關于cubemx生成邏輯printf升級usart.cmain.hretarget.c 定時器定時器的概念cubemxkeil5…

帶電池監控功能的恒流直流負載組

EAK的交流和直流工業電池負載組測試儀對于測試和驗證關鍵電力系統的能力至關重要&#xff0c;旨在實現最佳精度。作為一家客戶至上的公司&#xff0c;我們繼續盡我們所能應對供應鏈挑戰&#xff0c;以提供出色的交貨時間&#xff0c;大約是行業其他公司的一半。 交流負載組 我…

時鐘切換的代碼

目錄 描述 輸入描述&#xff1a; 輸出描述&#xff1a; 參考代碼 描述 題目描述&#xff1a; 存在兩個同步的倍頻時鐘clk0 clk1,已知clk0是clk1的二倍頻&#xff0c;現在要設計一個切換電路&#xff0c;sel選擇時候進行切換&#xff0c;要求沒有毛刺。 信號示意圖&…

學習springMVC

第四章 Spring MVC 第一節 Spring MVC 簡介 1. Spring MVC SpringMVC是一個Java 開源框架&#xff0c; 是Spring Framework生態中的一個獨立模塊&#xff0c;它基于 Spring 實現了Web MVC&#xff08;數據、業務與展現&#xff09;設計模式的請求驅動類型的輕量級Web框架&am…

車云匯的元宇宙之旅

在汽車行業持續迎來數字化和科技革新的今天&#xff0c;車云匯作為一個領先的汽車服務平臺&#xff0c;正通過探索元宇宙這一新興概念&#xff0c;將傳統服務與虛擬現實技術相結合&#xff0c;為車主提供全新的互動體驗和服務模式。這一創新不僅有望改變汽車行業的服務面貌&…

匿名內部類在Java編程中的應用與限制

匿名內部類在Java編程中的應用與限制 大家好&#xff0c;我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01; 匿名內部類在Java編程中的應用與限制 1. 什么是匿名內部類&#xff1f;…