本文源碼: GitHub·點(diǎn)這里 || GitEE·點(diǎn)這里
創(chuàng)新互聯(lián)公司長(zhǎng)期為上1000家客戶(hù)提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開(kāi)放共贏(yíng)平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為開(kāi)化企業(yè)提供專(zhuān)業(yè)的成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè),開(kāi)化網(wǎng)站改版等技術(shù)服務(wù)。擁有十年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開(kāi)發(fā)。EhCache是一個(gè)純Java的進(jìn)程內(nèi)緩存框架,具有快速、上手簡(jiǎn)單等特點(diǎn),是Hibernate中默認(rèn)的緩存提供方。
Hibernate三級(jí)緩存機(jī)制簡(jiǎn)介:
一級(jí)緩存:基于Session級(jí)別分配一塊緩存空間,緩存訪(fǎng)問(wèn)的對(duì)象信息。Session關(guān)閉后會(huì)自動(dòng)清除緩存。
二級(jí)緩存:是SessionFactory對(duì)象緩存,可以被創(chuàng)建出的多個(gè) Session 對(duì)象共享,二級(jí)緩存默認(rèn)是關(guān)閉的,如果要使用需要手動(dòng)開(kāi)啟,并且依賴(lài)EhCache組件。
三級(jí)緩存:查詢(xún)緩存,配置開(kāi)啟該緩存的情況下,重復(fù)使用一個(gè)sql查詢(xún)某個(gè)范圍內(nèi)的數(shù)據(jù),會(huì)進(jìn)行緩存。
Ehcache:直接在Jvm虛擬機(jī)中緩存,速度快,效率高,不適合處理大規(guī)模緩存數(shù)據(jù),在分布式環(huán)境下,緩存數(shù)據(jù)共享操作復(fù)雜;
Redis:作為獨(dú)立的緩存中間件,在分布式緩存系統(tǒng)中非常好用,緩存數(shù)據(jù)共享,有效支撐大量數(shù)據(jù)緩存,支持哨兵模式,或者集群模式的高可用成熟方案;
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache</artifactId>
</dependency>
基礎(chǔ)配置
spring:
cache:
ehcache:
config: classpath:ehcache.xml
啟動(dòng)類(lèi)注解
@EnableCaching
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class,args) ;
}
}
<ehcache xmlns:xsi="/tupian/20230522/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">
<!-- 操作系統(tǒng)緩存的臨時(shí)目錄,內(nèi)存滿(mǎn)后寫(xiě)入該目錄 -->
<diskStore path="java.io.tmpdir"/>
<defaultCache
maxElementsInMemory="1000"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
maxElementsOnDisk="10000000"
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU">
<persistence strategy="localTempSwap"/>
</defaultCache>
<cache name="userEntity"
maxElementsInMemory="1000"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
maxElementsOnDisk="10000000"
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU">
<persistence strategy="localTempSwap"/>
</cache>
</ehcache>
配置參數(shù)說(shuō)明
maxElementsOnDisk:磁盤(pán)緩存中最多可以存放的元素?cái)?shù)量;
eternal:緩存中對(duì)象是否永久有效;
timeToIdleSeconds:當(dāng)eternal=false時(shí)使用,緩存數(shù)據(jù)有效期(單位:秒),時(shí)間段內(nèi)沒(méi)有訪(fǎng)問(wèn)該元素,將被清除;
timeToLiveSeconds:緩存數(shù)據(jù)的存活時(shí)間;
maxElementsInMemory:內(nèi)存中最多可以存放的元素?cái)?shù)量,overflowToDisk=true,則會(huì)將Cache中多出的元素放入磁盤(pán)文件中,若overflowToDisk=false,則根據(jù)memoryStoreEvictionPolicy策略替換Cache中原有的元素;
diskExpiryThreadIntervalSeconds:磁盤(pán)緩存的清理線(xiàn)程運(yùn)行間隔;
memoryStoreEvictionPolicy:緩存釋放策略,LRU會(huì)優(yōu)先清理最少使用的緩存;
localTempSwap:持久化策略,當(dāng)堆內(nèi)存或者非堆內(nèi)存里面的元素已經(jīng)滿(mǎn)了的時(shí)候,將其中的元素臨時(shí)的存放在磁盤(pán)上,重啟后就會(huì)消失;
@Service
public class CacheService {
private static final Logger LOGGER = LoggerFactory.getLogger(CacheService.class);
@Resource
private UserMapper userMapper ;
@Cacheable(value="userEntity") // 在緩存有效期內(nèi),首次查詢(xún)才訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)
public UserEntity getById (Integer id){
// 通過(guò)日志,標(biāo)識(shí)方法是否執(zhí)行
LOGGER.info("getById..."+id);
return userMapper.selectById(id) ;
}
@CacheEvict(value="userEntity",key = "#id") //該ID數(shù)據(jù)更新,清空該ID緩存
public void updateUser(Integer id) {
UserEntity user = new UserEntity() ;
user.setId(id);
user.setUserName("myCache");
userMapper.updateById(user);
}
}
@Cacheable:注解標(biāo)記在一個(gè)方法上,也可以標(biāo)記在一個(gè)類(lèi)上,標(biāo)記在一個(gè)方法上表示該方法支持緩存,該方法被調(diào)用后將其返回值緩存起來(lái),下次同樣的請(qǐng)求參數(shù)執(zhí)行該方法時(shí)可以直接從緩存中獲取結(jié)果,而不需要再次執(zhí)行該方法。
@CacheEvict:注解標(biāo)記在需要清除緩存元素的方法或類(lèi)上的,當(dāng)標(biāo)記在一個(gè)類(lèi)上時(shí)表示其中所有的方法的執(zhí)行都會(huì)觸發(fā)緩存的清除操作,并且可以按照指定屬性清除。
GitHub·地址
/tupian/20230522/middle-ware-parent
GitEE·地址
/tupian/20230522/middle-ware-parent
分享題目:SpringBoot2整合Ehcache組件,輕量級(jí)緩存管理-創(chuàng)新互聯(lián)
鏈接URL:http://muchs.cn/article26/cedejg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)、動(dòng)態(tài)網(wǎng)站、網(wǎng)站收錄、做網(wǎng)站、定制開(kāi)發(fā)、移動(dòng)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容