目錄
- Redis緩存
- 主要步驟
- 具體實踐
- 整體目錄結構
- yml文件里配置Redis集群
- 設置序列化的Bean
- 編寫業務Controller
- 關于緩存的其他注解
- 檢驗結果
之前不是說過Redis可以當作緩存用嘛
現在我們就配置一下SpringBoot使用Redis的緩存
Redis緩存
為什么用Redis作緩存
用redis做緩存,是因為redis有著很優秀的讀寫能力,在集群下可以保證數據的高可用
主要步驟
1、pom.xml文件添加依賴
2、yml文件配置redis集群
3、編寫RedisConfig配置序列化及緩存配置,添加緩存注解
4、編寫業務Controller,添加緩存注解
5、編寫啟動類
具體實踐
整體目錄結構
pom.xml添加依賴
?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>
groupId>org.example/groupId>
artifactId>SpringBoot_Redis/artifactId>
version>1.0-SNAPSHOT/version>
properties>
java.version>1.8/java.version>
/properties>
parent>
groupId>org.springframework.boot/groupId>
artifactId>spring-boot-starter-parent/artifactId>
version>2.1.8.RELEASE/version>
/parent>
dependencies>
dependency>
groupId>org.springframework.boot/groupId>
artifactId>spring-boot-starter-web/artifactId>
/dependency>
!--整合redis-->
dependency>
groupId>org.springframework.boot/groupId>
artifactId>spring-boot-starter-data-redis/artifactId>
/dependency>
!--spring boot test-->
dependency>
groupId>org.springframework.boot/groupId>
artifactId>spring-boot-starter-test/artifactId>
/dependency>
/dependencies>
/project>

yml文件里配置Redis集群
結構是ip+port
spring:
redis:
cluster:
nodes:
- 169.254.0.100:8001
- 169.254.0.100:8002
- 169.254.0.100:8003
- 169.254.0.100:8004
- 169.254.0.100:8005
- 169.254.0.100:8006

編寫RedisConfig配置序列化及緩存配置,添加緩存注解

設置序列化的Bean

設置緩存的Bean

這里有必要解釋一下
- cacheNames.add() 這里我理解的是和controller進行綁定,畢竟很多controller的時候,這里可以確定到底那個controller開啟緩存,以及每個controller對緩存的要求可能也不一樣
- configMap這里就是將我們對緩存的一些配置和命名空間進行關聯
- 設置緩存時間和禁止緩存空數據應該還好理解
編寫業務Controller
@RestController
@RequestMapping("user")
public class RedisCacheController {
@Cacheable(value = "user",key = "#root.methodName+#root.args[0]")
@GetMapping("findWord/{id}")
public String findWord(@PathVariable String id) {
System.out.println("Cacheing");
HashMapString, String> words = new HashMap>();
words.put("1", "java");
words.put("2", "redis");
words.put("3", "cache");
return words.get(id);
}
}
@Cacheable一定要加在方法之上
value就是之前在RedisConfig中定義的命名空間,也是緩存保存的空間
key就是緩存保存的key,這里以方法名為key,但是為避免方法名重復導致的key重復,所以加入id,來避免重復
關于緩存的其他注解
在支持Spring Cache的環境中,對于使用@Cacheale標注的方法,Spring在每次執行前都會檢查Cache中是否存在相同的key的緩存元素,如果存在就不再執行該方法,而是從緩存中獲取結果直接進行返回,若不存在才會執行方法并將返回結果存入指定的緩存中
@Cacheput也可以生命一個方法支持緩存功能,與@Cacheable不同的是使用@CachePut標注的方法在執行并不會去檢查緩存中是否存在之前執行過的結果,而是每次都會執行該方法,并將執行結果以鍵值對的形式存入緩存中。
CacheEvict是用來標注在需要清除緩存元素的方法或類上的。
當標記在一個類上時表示其中所有的方法的執行都會觸發緩存的清除操作
@CacheEvict可以指定的屬性有value、key、condition、allEntries和beforeInvocation。
其中value、key和condition的語義與@Cacheable對應的屬性類似。即value表示清除操作是發生在哪些緩存(命名空間)上的
key表示要清除的是哪個key,如未指定則會誰用默認策略生成的key,condition表示清除操作發生的條件
allEntries屬性
allEntries是boolean類型的,表示是否要清除緩存中的所有元素,默認為false,當指定為true時,會忽略指定的key
beforeInvocation屬性
清除操作默認時在對應方法成功執行后觸發的,即方法如果因為拋出異常而未能成功返回也不會觸發清除操作
使用beforeInvocation可以改變觸發清除操作的時間,當我們指定屬性值為true時,Spring會在調用該方法之前清除緩存中的指定元素 編寫啟動類
就是傳統的啟動類

檢驗結果
使用postman發送請求進行檢測
第一次的時候可以看到控制臺打印

這說明方法執行了
但是第二次發送相同請求的時候,可以看到拿到了數據,但是方法沒有執行,說明緩存有用了


好了,到此結束。
到此這篇關于SpringBoot 開啟Redis緩存的文章就介紹到這了,更多相關SpringBoot Redis緩存內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- 詳解redis與spring的整合(使用緩存)
- 淺談SpringCache與redis集成實現緩存解決方案
- spring整合redis實現數據緩存的實例代碼
- spring整合redisson開啟緩存方式