SpringCache的基本使用方法
概述
常見的緩存的框架有Redis、Memcached、Guava、Caffeine等等, 各有各的優(yōu)勢。如果我們的程序想要使用緩存,就要與這些框架耦合。聰明的架構(gòu)師已經(jīng)在利用接口來降低耦合了,利用面向?qū)ο蟮某橄蠛投鄳B(tài)的特性,做到業(yè)務代碼與具體的框架分離。但我們?nèi)匀恍枰@式地在代碼中去調(diào)用與緩存有關的接口和方法,在合適的時候插入數(shù)據(jù)到緩存里,在合適的時候從緩存中讀取數(shù)據(jù)。
Spring Cache利用了AOP,實現(xiàn)了基于注解的緩存功能,并且進行了合理的抽象,業(yè)務代碼不用關心底層是使用了什么緩存框架,只需要簡單地加一個注解,就能實現(xiàn)緩存功能了。而且Spring Cache也提供了很多默認的配置,用戶可以3秒鐘就使用上一個很不錯的緩存功能。
SpringCache使用
常用注解
注解 | 說明 |
---|---|
@EnableCaching | 開啟緩存注解功能,通常加在啟動類上 |
@Cacheable | 在方法執(zhí)行前先查詢緩存中是否有數(shù)據(jù),如果有數(shù)據(jù),則直接返回緩存數(shù)據(jù);如果沒有緩存數(shù)據(jù),調(diào)用方法并將方法返回值放到緩存中 |
@CachePut | 將方法的返回值放到緩存中 |
@CacheEvict | 將一條或多條數(shù)據(jù)從緩存中刪除 |
引入相關依賴
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.7.3</version> <relativePath/> </parent> <groupId>com.itheima</groupId> <artifactId>springcache-demo</artifactId> <version>1.0-SNAPSHOT</version> <properties> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <scope>compile</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.20</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.76</version> </dependency> <dependency> <groupId>commons-lang</groupId> <artifactId>commons-lang</artifactId> <version>2.6</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.2.0</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.2.1</version> </dependency> <dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>knife4j-spring-boot-starter</artifactId> <version>3.0.2</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>2.7.3</version> </plugin> </plugins> </build> </project>
使用步驟
配置文件
需要在配置文件中設置相關內(nèi)容,Redis地址、MySQL地址等,使用SpringCache可以將返回或者請求內(nèi)容自動存入Redis
server: port: 8888 spring: datasource: druid: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://XXXX:3305/springcachedemo?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true username: root password: "02120212" redis: host: XXXX port: 6378 password: "02120212" database: 0 logging: level: com: itheima: mapper: debug service: info controller: info
開始使用
1、開啟緩存
需要在啟動類上加上@EnableCaching
注解
2、設置緩存
設置緩存使用@CachePut
注解。如果需要將請求的內(nèi)容放入緩存可以按照以下步驟實現(xiàn)。
設置鍵的格式為參數(shù)::參數(shù)
,由于在Redis中可以設置樹型結(jié)構(gòu)。
關于Redis樹型結(jié)構(gòu)
如果需要設置Redis樹型結(jié)構(gòu),可以設置鍵為
abc:bca:cba
這樣設置在Redis中展現(xiàn)就像是樹型,像是文件夾的目錄結(jié)構(gòu)。
適應不同用戶的習慣,有多種方式獲取參數(shù),這里的cacheNames
設置是
// TODO 2. 設置緩存數(shù)據(jù)值 @CachePut(cacheNames = "userCache", key = "#user.id")// 格式為 userCache::abc ;key = "#user.id" 中usr與下面user對應 @CachePut(cacheNames = "userCache",key = "#result.id")// #result.id 取到返回值id 對象導航 @CachePut(cacheNames = "userCache",key = "#p0.id")// 取到第一個參數(shù),這里沒有第二個參數(shù)所以取不到 @CachePut(cacheNames = "userCache",key = "#a0.id")// 取到第一個參數(shù),這里沒有第二個參數(shù)所以取不到 @CachePut(cacheNames = "userCache",key = "#root.args[0].id")// 取到第一個參數(shù),這里沒有第二個參數(shù)所以取不到 public User save(@RequestBody User user) { userMapper.insert(user); return user; }
但是這也設置在Redis中會存在有個“文件夾”沒有名字,因為接受的參數(shù)是內(nèi)容:內(nèi)容
而在這的格式為內(nèi)容::內(nèi)容
所以會有一個為空
在上面示例中,想獲取傳入的數(shù)值可以使用,如:user
,獲取里面的id可以使用user.id
以此類推
所以在上面設置中顯示的格式為
userCache::id中的值
傳入的值是單個
如果傳入的值是一個,也可以按照這個方式去設置,效果和原理也是一樣的。
@GetMapping @Cacheable(cacheNames = "userCache", key = "#id")// TODO 3. 將key設置為 userCache::id public User getById(Long id) { User user = userMapper.getById(id); return user; }
那么在上面的示例中顯示的格式為
userCache::id的值
3、清理緩存
清理緩存使用注解@CacheEvict
,使用格式為@CacheEvict(cacheNames = "userCache", key = "#id")
@DeleteMapping("/delAll") @CacheEvict(cacheNames = "userCache", allEntries = true) // TODO 5. 清理所有數(shù)據(jù)將userCache所有都刪除 public void deleteAll() { userMapper.deleteAll(); }
上述清理格式為
userCache::id的值
如果這個值存在就會被清除
4、清理所有數(shù)據(jù)將userCache所有都刪除
如果想將所有的開頭為userCache
的緩存都清除可以使用@CacheEvict
,和清除單個緩存一樣。
示例:@CacheEvict(cacheNames = "userCache", allEntries = true)
只需要將參數(shù)改為allEntries
并且設置為true即可
@DeleteMapping("/delAll") @CacheEvict(cacheNames = "userCache", allEntries = true) // TODO 5. 清理所有數(shù)據(jù)將userCache所有都刪除 public void deleteAll() { userMapper.deleteAll(); }
到此這篇關于SpringCache的基本使用方法的文章就介紹到這了,更多相關SpringCache使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
SpringBoot注解篇之@Resource與@Autowired的使用區(qū)別
@Resource 注解和 @Autowired 注解都是在 Spring Framework 中進行依賴注入的注解,那么你知道他們有什么區(qū)別嗎,本文就來介紹一下2023-12-12Springboot整合hibernate validator 全局異常處理步驟詳解
本文分步驟給大家介紹Springboot整合hibernate validator 全局異常處理,補呢文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2024-01-01java學生信息管理系統(tǒng)MVC架構(gòu)詳解
這篇文章主要為大家詳細介紹了java學生信息管理系統(tǒng)MVC架構(gòu)的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-11-11解決Springboot @Autowired 無法注入問題
WebappApplication 一定要在包的最外層,否則Spring無法對所有的類進行托管,會造成@Autowired 無法注入。接下來給大家介紹解決Springboot @Autowired 無法注入問題,感興趣的朋友一起看看吧2018-08-08SpringBoot讀取Resource目錄下文件的四種方式總結(jié)
在Spring?Boot項目中,經(jīng)常需要獲取resources目錄下的文件,這些文件可以包括配置文件、模板文件、靜態(tài)資源等,本文將介紹四種常用的方法來獲取resources目錄下的文件,需要的朋友可以參考下2023-08-08springboot配置內(nèi)存數(shù)據(jù)庫H2教程詳解
這篇文章主要介紹了springboot配置內(nèi)存數(shù)據(jù)庫H2的詳細教程,需要的朋友可以參考下2017-07-07Java中Spring Boot支付寶掃碼支付及支付回調(diào)的實現(xiàn)代碼
這篇文章主要介紹了Java中Spring Boot支付寶掃碼支付及支付回調(diào)的實現(xiàn)代碼,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-02-02