SpringBoot 開啟Redis緩存及使用方法
之前不是說過Redis可以當(dāng)作緩存用嘛
現(xiàn)在我們就配置一下SpringBoot使用Redis的緩存
Redis緩存
為什么用Redis作緩存
用redis做緩存,是因?yàn)閞edis有著很優(yōu)秀的讀寫能力,在集群下可以保證數(shù)據(jù)的高可用
主要步驟
1、pom.xml文件添加依賴
2、yml文件配置redis集群
3、編寫RedisConfig配置序列化及緩存配置,添加緩存注解
4、編寫業(yè)務(wù)Controller,添加緩存注解
5、編寫啟動類
具體實(shí)踐
整體目錄結(jié)構(gòu)
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集群
結(jié)構(gòu)是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配置序列化及緩存配置,添加緩存注解
設(shè)置序列化的Bean
設(shè)置緩存的Bean
這里有必要解釋一下
- cacheNames.add() 這里我理解的是和controller進(jìn)行綁定,畢竟很多controller的時候,這里可以確定到底那個controller開啟緩存,以及每個controller對緩存的要求可能也不一樣
- configMap這里就是將我們對緩存的一些配置和命名空間進(jìn)行關(guān)聯(lián)
- 設(shè)置緩存時間和禁止緩存空數(shù)據(jù)應(yīng)該還好理解
編寫業(yè)務(wù)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"); HashMap<String, 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,但是為避免方法名重復(fù)導(dǎo)致的key重復(fù),所以加入id,來避免重復(fù)
關(guān)于緩存的其他注解
- @CachePut
在支持Spring Cache的環(huán)境中,對于使用@Cacheale標(biāo)注的方法,Spring在每次執(zhí)行前都會檢查Cache中是否存在相同的key的緩存元素,如果存在就不再執(zhí)行該方法,而是從緩存中獲取結(jié)果直接進(jìn)行返回,若不存在才會執(zhí)行方法并將返回結(jié)果存入指定的緩存中
@Cacheput也可以生命一個方法支持緩存功能,與@Cacheable不同的是使用@CachePut標(biāo)注的方法在執(zhí)行并不會去檢查緩存中是否存在之前執(zhí)行過的結(jié)果,而是每次都會執(zhí)行該方法,并將執(zhí)行結(jié)果以鍵值對的形式存入緩存中。
- @CacheEvict
CacheEvict是用來標(biāo)注在需要清除緩存元素的方法或類上的。
當(dāng)標(biāo)記在一個類上時表示其中所有的方法的執(zhí)行都會觸發(fā)緩存的清除操作
@CacheEvict可以指定的屬性有value、key、condition、allEntries和beforeInvocation。
其中value、key和condition的語義與@Cacheable對應(yīng)的屬性類似。即value表示清除操作是發(fā)生在哪些緩存(命名空間)上的
key表示要清除的是哪個key,如未指定則會誰用默認(rèn)策略生成的key,condition表示清除操作發(fā)生的條件
allEntries屬性
allEntries是boolean類型的,表示是否要清除緩存中的所有元素,默認(rèn)為false,當(dāng)指定為true時,會忽略指定的key
beforeInvocation屬性
清除操作默認(rèn)時在對應(yīng)方法成功執(zhí)行后觸發(fā)的,即方法如果因?yàn)閽伋霎惓6茨艹晒Ψ祷匾膊粫|發(fā)清除操作
使用beforeInvocation可以改變觸發(fā)清除操作的時間,當(dāng)我們指定屬性值為true時,Spring會在調(diào)用該方法之前清除緩存中的指定元素 編寫啟動類
就是傳統(tǒng)的啟動類
檢驗(yàn)結(jié)果
使用postman發(fā)送請求進(jìn)行檢測
第一次的時候可以看到控制臺打印
這說明方法執(zhí)行了
但是第二次發(fā)送相同請求的時候,可以看到拿到了數(shù)據(jù),但是方法沒有執(zhí)行,說明緩存有用了
好了,到此結(jié)束。
到此這篇關(guān)于SpringBoot 開啟Redis緩存的文章就介紹到這了,更多相關(guān)SpringBoot Redis緩存內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Redis主從架構(gòu)和高可用性實(shí)現(xiàn)過程
本文詳細(xì)介紹了使用Redis主從架構(gòu)和Linux虛擬服務(wù)器(LVS)實(shí)現(xiàn)高可用性的方法,并回顧了最近完成的Redis集群遷移部署過程,主從架構(gòu)通過復(fù)制數(shù)據(jù)來提高性能和數(shù)據(jù)冗余,而LVS用于實(shí)現(xiàn)負(fù)載均衡和故障切換,感興趣的朋友跟隨小編一起看看吧2024-09-09Satoken+Redis實(shí)現(xiàn)短信登錄、注冊、鑒權(quán)功能
這篇文章主要介紹了Satoken+Redis實(shí)現(xiàn)短信登錄、注冊、鑒權(quán)功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2024-01-01面試分析分布式架構(gòu)Redis熱點(diǎn)key大Value解決方案
這篇文章主要為大家介紹了分布式架構(gòu)Redis熱點(diǎn)key大Value解決方案,以及在面試中如果遇到這類問題的分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助2022-03-03淺析對redis?hashtable?的sizemask理解
在?Redis?的哈希表實(shí)現(xiàn)中,index?=?hash?&?dict->ht[0].sizemask?是計算鍵值對應(yīng)存儲位置的核心操作,本文給大家介紹redis?hashtable?的sizemask理解,感興趣的朋友一起看看吧2025-03-03