樹(shù)莓派 做網(wǎng)站開(kāi)發(fā)定制軟件公司
除了我們默認(rèn)的緩存形式simlpe之外, 我們其實(shí)還有許多其他種類的緩存供應(yīng)
Ehcache就是其中的一種形式
Ehcache在SpringBoot當(dāng)中的使用:
其實(shí)跟我們之前整合第三方的資源是一樣的形式
1>導(dǎo)入依賴:
<!-- 更換緩存, 將默認(rèn)使用的 Simple 更換為Ehcache-->
<dependency>
<groupId>net.sf.ehcache</groupId> <artifactId>ehcache</artifactId>
</dependency>
2>加載對(duì)應(yīng)的配置文件:
配置一:
首先是有關(guān)Ehcache的相關(guān)配置 , 設(shè)置其配置的名稱為:
ehcache.xml即可 默認(rèn)的名稱也是這樣的
配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"><!-- 磁盤(pán)緩存位置 --><diskStore path="java.io.tmpdir/ehcache"/><!-- 默認(rèn)緩存 --><defaultCachemaxEntriesLocalHeap="10000"eternal="false"timeToIdleSeconds="3600"timeToLiveSeconds="3600"maxEntriesLocalDisk="10000000"diskExpiryThreadIntervalSeconds="120"memoryStoreEvictionPolicy="LRU"/>
<!--第三個(gè), 以及第四個(gè)屬性 是用來(lái)設(shè)置對(duì)應(yīng)的緩存的存在時(shí)間的, 超過(guò)時(shí)間就會(huì)自己自動(dòng)的清空緩存--><cache name="smsCode"maxElementsInMemory="60"eternal="false"timeToIdleSeconds="20"timeToLiveSeconds="20"overflowToDisk="false"memoryStoreEvictionPolicy="LRU"/>
</ehcache>
配置二:
在我們的SpringBoot的配置文件當(dāng)中修改:
# 設(shè)置我們當(dāng)前使用的緩存, 默認(rèn)的情況下就是一個(gè) Simple 的類
# 我們也可以自己進(jìn)行變更, 將其設(shè)置成為一個(gè)對(duì)應(yīng)的 ehcache的類型cache:type: ehcache
3>開(kāi)啟緩存
實(shí)際上跟之前使用我們默認(rèn)開(kāi)啟緩存的方式是一樣的
第一步都是需要我們?cè)谂渲妙惍?dāng)中打開(kāi)對(duì)應(yīng)的緩存設(shè)置
@SpringBootApplication //配置類當(dāng)中設(shè)置我們當(dāng)前是允許開(kāi)啟緩存的` @EnableCaching public class Spring19CacheApplication {
之后在我們需要使用的類的方法之上添加對(duì)應(yīng)的注解:
@Cacheable(value=? ?, key =)
@CachePut(value=, key = )
這里的value指的是我們的實(shí)例的緩存? 第二個(gè)key指的是我們對(duì)應(yīng)的唯一標(biāo)識(shí)
這兩個(gè)之間的區(qū)別還是比較大的, 我們來(lái)粗淺的做一下比對(duì), 分析
4>@Cacheable與@CachePut:
@Cacheable:
僅僅第一次獲取數(shù)據(jù)是依靠我們?cè)O(shè)置的方法進(jìn)行獲取的, 之后再次使用的時(shí)候, 都是根據(jù)我們的實(shí)力緩存當(dāng)中獲取的
@Cacheable(value = "smsCode",key = "#tel")
public String sendCodeToSMS(String tel) {System.out.println("==================CachePut方法被執(zhí)行了!!!!=================");String generator = code.generator(tel);return generator;
}
使用這種方式, 我們針對(duì)同一個(gè)手機(jī)號(hào), 發(fā)送多次請(qǐng)求, 依舊是僅僅只有一個(gè)結(jié)果
那么就說(shuō)明我們的方法僅僅只用了一次
之后使用的都是緩存當(dāng)中的數(shù)據(jù)了
@CachePut:
每一次都會(huì)調(diào)用對(duì)應(yīng)的方法, 不是從我們的緩存值當(dāng)中去拿的, 而是每一次都會(huì)將我們的返回值放進(jìn)緩存內(nèi)部!
@CachePut(value = "smsCode",key = "#tel")
public String sendCodeToSMS(String tel) {System.out.println("==================CachePut方法被執(zhí)行了!!!!=================");String generator = code.generator(tel);return generator;
}
比如我們使用手機(jī)號(hào)獲取驗(yàn)證碼的一個(gè)小功能, 這里發(fā)送幾次請(qǐng)求, 就有幾個(gè)返回過(guò)來(lái)的驗(yàn)證碼, 即使是針對(duì)同一個(gè)的手機(jī)號(hào), 在很短的時(shí)間內(nèi)