SpringBoot緩存

目錄

緩存支持

?緩存集成

redis緩存集成


緩存支持

Spring 框架只提供抽象,不提供具體的緩存存儲,底層需要依賴第三方存儲組件,如果當前應用沒有注冊CacheManager 或者 CacheResolver 實例,Spring Boot 會按以下緩存組件的順序來檢測:

  1. Generic
  2. JCache (SR-107)(EhCache 3, Hazelcast, Infinispan 等等)
  3. Hazelcast
  4. lnfinispan
  5. Couchbase
  6. redis

........

Spring Boot的自動配置類為:CacheAutoConfiguration,在 CacheAutoConfiguration 緩存自動配置類中引入了 CacheConfigurationImportSelector 配置選擇器:

@AutoConfiguration(after = { CouchbaseDataAutoConfiguration.class, HazelcastAutoConfiguration.class,HibernateJpaAutoConfiguration.class, RedisAutoConfiguration.class })
@ConditionalOnClass(CacheManager.class)
@ConditionalOnBean(CacheAspectSupport.class)
@ConditionalOnMissingBean(value = CacheManager.class, name = "cacheResolver")
@EnableConfigurationProperties(CacheProperties.class)
@Import({ CacheConfigurationImportSelector.class, CacheManagerEntityManagerFactoryDependsOnPostProcessor.class })
public class CacheAutoConfiguration {...static class CacheConfigurationImportSelector implements ImportSelector {@Overridepublic String[] selectImports(AnnotationMetadata importingClassMetadata) {CacheType[] types = CacheType.values();String[] imports = new String[types.length];for (int i = 0; i < types.length; i++) {imports[i] = CacheConfigurations.getConfigurationClass(types[i]);}return imports;}}

該選擇器通過 CacheConfiqurations 緩存配置類來選擇對應緩存組件的配置類:

final class CacheConfigurations {private static final Map<CacheType, String> MAPPINGS;static {Map<CacheType, String> mappings = new EnumMap<>(CacheType.class);mappings.put(CacheType.GENERIC, GenericCacheConfiguration.class.getName());mappings.put(CacheType.HAZELCAST, HazelcastCacheConfiguration.class.getName());mappings.put(CacheType.INFINISPAN, InfinispanCacheConfiguration.class.getName());mappings.put(CacheType.JCACHE, JCacheCacheConfiguration.class.getName());mappings.put(CacheType.COUCHBASE, CouchbaseCacheConfiguration.class.getName());mappings.put(CacheType.REDIS, RedisCacheConfiguration.class.getName());mappings.put(CacheType.CAFFEINE, CaffeineCacheConfiguration.class.getName());mappings.put(CacheType.CACHE2K, Cache2kCacheConfiguration.class.getName());mappings.put(CacheType.SIMPLE, SimpleCacheConfiguration.class.getName());mappings.put(CacheType.NONE, NoOpCacheConfiguration.class.getName());MAPPINGS = Collections.unmodifiableMap(mappings);}...代碼...}

?緩存集成

依賴配置:

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

加入依賴后,通過使用@EnableCaching注解來啟用緩存功能。通過參數type指定要使用的緩存組件,以redis為示例:

spring:cache: type: redis

禁用緩存

spring:cache: type: none

?緩存類型type的值

  • GENERIC: 通用緩存類型
  • HAZELCAST: Hazelcast 緩存類型
  • INFINISPAN: Infinispan 緩存類型
  • JCACHE: JCache 緩存類型
  • COUCHBASE: Couchbase 緩存類型
  • REDIS: Redis 緩存類型
  • CAFFEINE: Caffeine 緩存類型
  • CACHE2K: Cache2k 緩存類型
  • SIMPLE: 簡單緩存類型
  • NONE: 無緩存類型

redis緩存集成

Spring Boot 2.7中使用@EnableCaching注解啟用緩存功能時,如果你想使用Redis作為緩存存儲,你需要在配置文件中指定Redis的相關配置。

application.properties或application.yml文件中添加以下配置:


spring:cache:type: redis # 指定緩存使用redisredis:host: 127.0.0.1 # Redis服務器地址database: 1 # Redis數據庫索引(默認為0)port: 6379 # Redis服務器連接端口password: # Redis服務器連接密碼(默認為空)

依賴配置:

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

?配置緩存管理器:

@Configuration
@EnableCaching
public class RedisTemplateConfiguration {/*** 默認過期時長,單位:秒*/@Getterprivate long expire = 60 * 60 * 24;
?@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();redisTemplate.setKeySerializer(RedisSerializer.string());redisTemplate.setHashKeySerializer(RedisSerializer.string());redisTemplate.setValueSerializer(RedisSerializer.java());redisTemplate.setHashValueSerializer(RedisSerializer.java());redisTemplate.setConnectionFactory(factory);return redisTemplate;}
?@Beanpublic HashOperations<String, String, Object> hashOperations(RedisTemplate<String, Object> redisTemplate) {return redisTemplate.opsForHash();}
?@Beanpublic ValueOperations<String, String> valueOperations(RedisTemplate<String, String> redisTemplate) {return redisTemplate.opsForValue();}
?@Beanpublic ListOperations<String, Object> listOperations(RedisTemplate<String, Object> redisTemplate) {return redisTemplate.opsForList();}
?@Beanpublic SetOperations<String, Object> setOperations(RedisTemplate<String, Object> redisTemplate) {return redisTemplate.opsForSet();}
?@Beanpublic ZSetOperations<String, Object> zSetOperations(RedisTemplate<String, Object> redisTemplate) {return redisTemplate.opsForZSet();}
}

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

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

相關文章

[藍橋杯 2020 省 B1] 整數拼接

一、題目描述 P8712 [藍橋杯 2020 省 B1] 整數拼接 二、題目簡析 我們選兩個數 a a a 和 b b b&#xff0c;用 f ( a , b ) f(a, b) f(a,b) 表示 a a a 在前、 b b b 在后的拼接&#xff0c;即 f ( a , b ) a ? 1 0 b . s i z e b f(a, b) a * 10^{b.size} b f(a,…

Linux學習:初始Linux

目錄 1. 引子&#xff1a;1.1 簡述&#xff1a;操作系統1.2 學習工具 2. Linux操作系統中的一些基礎概念與指令2.1 簡單指令2.2 ls指令與文件2.3 cd指令與目錄2.4 文件目錄的新建與刪除指令2.5 補充指令1&#xff1a;2.6 文件編輯與拷貝剪切2.7 文件的查看2.8 時間相關指令2.9 …

洛谷P1256 顯示圖像

廣搜練手題 題目鏈接 思路 打印每個數與其最近的 1 1 1的曼哈頓距離&#xff0c;顯然廣搜&#xff0c;存儲每一個 1 1 1&#xff0c;針對每一個 1 1 1開始廣搜&#xff0c;逐層更新&#xff0c;每輪后更新的為兩輪之中的最小曼哈頓距離 ACcode #include<bits/stdc.h>…

波動數列(藍橋杯)

問題描述&#xff1a; 觀察如下數列&#xff1a; 1 3 0 2 -1 1 -2 … 這個數列中后一項總是比前一項增加 2 或者減少 3。 棟棟對這種數列很好奇&#xff0c;他想知道長度為 n nn 和為 s ss 而且后一項總是比前一項增加 a aa 或者減少 b bb 的整數數列可能有多少種呢&#xff1f…

非專業程序員常用vscode插件

牙叔教程 簡單易懂 我常用的腳本語言是js, python. AutoHotkey v2 Language Support vscode-autohotkey-debug 由于工作有寫重復, 要用到autohotkey, 所以裝這個插件 Black Formatter 格式化python代碼 Bookmarks 書簽 change-case 命名方式: 小駝峰, 下劃線, 等命名風格轉…

【網站項目】202物流管理系統

&#x1f64a;作者簡介&#xff1a;擁有多年開發工作經驗&#xff0c;分享技術代碼幫助學生學習&#xff0c;獨立完成自己的項目或者畢業設計。 代碼可以私聊博主獲取。&#x1f339;贈送計算機畢業設計600個選題excel文件&#xff0c;幫助大學選題。贈送開題報告模板&#xff…

不會代碼的時候,如何使用Jmeter完成接口測試

1.接口測試簡介 接口測試是測試系統組件間接口的一種測試。接口測試主要用于檢測外部系統與系統之間以及內部各個子系統之間的交互點。測試的重點是要檢查數據的交換&#xff0c;傳遞和控制管理過程&#xff0c;以及系統間的相互邏輯依賴關系等。 2.接口測試流程 接口測試的…

【貪玩巴斯】VisualStudio+Github聯合工作指令

實現在本地VisualStudio進行代碼改寫&#xff0c;同時上傳Github和項目組成員實時更新代碼。 格式指令&#xff1a; alt z ctrl shift p后 輸入 wordwrap —— 進行格式排盤&#xff08;在一頁中能夠完全顯示&#xff0c;代碼會自動換行&#xff09; git pull origin mast…

2024.3.1 小項目

1、機械臂 #include <myhead.h> #define SER_IP "192.168.125.32" //服務器端IP #define SER_PORT 8888 //服務器端端口號#define CLI_IP "192.168.68.148" //客戶端IP #define CLI_PORT 9999 /…

串的BF算法(樸素查找算法)

串的模式匹配&#xff1a;在主串str的pos位置查找子串sub&#xff0c;找到返回下標&#xff0c;沒有找到返回-1。 1.BF算法思想 相等則繼續比較&#xff0c;不相等則回退&#xff1b;回退是i退到剛才位置的下一個&#xff08;i-j1&#xff09;;j退到0&#xff1b;利用子串是否…

Python matplotlib

目錄 1、安裝 matplotlib 2、繪制折線圖 修改標簽文字和線條粗細 校正圖形 3、繪制散點圖 繪制單點 繪制一系列點 自動計算數據 刪除數據點的輪廓 自定義顏色 使用顏色映射 自動保存圖表 4、隨機漫步 創建 RandomWalk() 類 選擇方向 繪制隨機漫步圖 給點著色 …

最簡單的ubuntu遠程桌面方法

最簡單的ubuntu遠程桌面方法 部署環境&#xff1a;Ubuntu 20.04 LTS 現在最常用的遠程控制Linux系統的方法是通過XRDP、VNC等&#xff0c;但是安裝配置過程繁瑣復雜&#xff0c;經常出現各種問題導致連接失敗&#xff0c;另外一方面延遲較高&#xff0c;操作卡頓。 經過我堅…

【Java項目介紹和界面搭建】拼圖小游戲——鍵盤、鼠標事件

&#x1f36c; 博主介紹&#x1f468;?&#x1f393; 博主介紹&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高興認識大家~ ?主攻領域&#xff1a;【滲透領域】【應急響應】 【Java】 【VulnHub靶場復現】【面試分析】 &#x1f389;點贊?評論?收藏 …

DDS數據分發服務——提升汽車領域數據傳輸效率

1.引言 隨著智能化技術的快速發展&#xff0c;汽車行業正經歷著一場革命性的變革。如今的分布式系統變得越來越復雜且龐大&#xff0c;對網絡通信基數要求在功能和性能層面越來越高。數據分發服務&#xff08;DDS&#xff09;作為一項先進的數據傳輸解決方案&#xff0c;在汽車…

2369. 檢查數組是否存在有效劃分(動態規劃)

2024-3-1 文章目錄 [2369. 檢查數組是否存在有效劃分](https://leetcode.cn/problems/check-if-there-is-a-valid-partition-for-the-array/)思路&#xff1a;代碼&#xff1a; 2369. 檢查數組是否存在有效劃分 思路&#xff1a; 1.狀態定義:f[i]代表考慮將[0,i]是否能被有效劃…

電腦要用多少V的電源?電腦電源輸入電壓是市電

臺式電源的輸出電壓是多少&#xff1f; 電腦電源輸出一般有三種不同的電壓&#xff0c;分別是&#xff1a; 12V、5V、3.3V。 電腦電源負責給電腦配件供電&#xff0c;如CPU、主板、內存條、硬盤、顯卡等&#xff0c;是電腦的重要組成部分。 工作電流根據不同的硬件及其使用狀…

LeetCode15:三數之和

題目描述 給你一個整數數組 nums &#xff0c;判斷是否存在三元組 [nums[i], nums[j], nums[k]] 滿足 i ! j、i ! k 且 j ! k &#xff0c;同時還滿足 nums[i] nums[j] nums[k] 0 。請 你返回所有和為 0 且不重復的三元組。 注意&#xff1a;答案中不可以包含重復的三元組…

【48天筆試強訓】day04

計算糖果 描述 A,B,C三個人是好朋友,每個人手里都有一些糖果,我們不知道他們每個人手上具體有多少個糖果,但是我們知道以下的信息&#xff1a; A - B, B - C, A B, B C. 這四個數值.每個字母代表每個人所擁有的糖果數. 現在需要通過這四個數值計算出每個人手里有多少個糖果…

編程語言:SQL Server數據庫使用教程,SQL Server增刪改查語句

「作者主頁」&#xff1a;士別三日wyx 「作者簡介」&#xff1a;CSDN top100、阿里云博客專家、華為云享專家、網絡安全領域優質創作者 「推薦專欄」&#xff1a;對網絡安全感興趣的小伙伴可以關注專欄《網絡安全自學教程》 SQL Server是微軟提供的一種關系型數據庫&#xff0c…

Python算法100例-3.3 阿姆斯特朗數

完整源代碼項目地址&#xff0c;關注博主私信源代碼后可獲取 1.問題描述2.問題分析3.算法設計4.確定程序框架5.完整的程序6.問題拓展 1&#xff0e;問題描述 如果一個整數等于其各個數字的立方和&#xff0c;則該數稱為“阿姆斯特朗數”&#xff08;亦稱為自戀性數&#xff…