本文原始碼:GitHub·點這里 || GitEE·點這里
一、Ehcache快取簡介
1、基礎簡介
EhCache是一個純Java的行程內快取框架,具有快速、上手簡單等特點,是Hibernate中默認的快取提供方,
2、Hibernate快取
Hibernate三級快取機制簡介:
一級快取:基于Session級別分配一塊快取空間,快取訪問的物件資訊,Session關閉后會自動清除快取,
二級快取:是SessionFactory物件快取,可以被創建出的多個 Session 物件共享,二級快取默認是關閉的,如果要使用需要手動開啟,并且依賴EhCache組件,
三級快取:查詢快取,配置開啟該快取的情況下,重復使用一個sql查詢某個范圍內的資料,會進行快取,
3、EhCache快取特點
- 快速,簡單,并且提供多種快取策略;
- 快取資料有兩級:記憶體和磁盤,無需擔心容量問題;
- 快取資料會在虛擬機重啟的程序中寫入磁盤;
- 可以通過RMI、可插入API等方式進行分布式快取;
- 具有快取和快取管理器的偵聽介面;
- 支持多快取管理器實體,以及一個實體的多個快取區域;
- 提供Hibernate的快取實作;
4、對比Redis快取
Ehcache:直接在Jvm虛擬機中快取,速度快,效率高,不適合處理大規模快取資料,在分布式環境下,快取資料共享操作復雜;
Redis:作為獨立的快取中間件,在分布式快取系統中非常好用,快取資料共享,有效支撐大量資料快取,支持哨兵模式,或者集群模式的高可用成熟方案;
二、集成SpringBoot框架
1、核心依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache</artifactId>
</dependency>
2、加載配置
基礎配置
spring:
cache:
ehcache:
config: classpath:ehcache.xml
啟動類注解
@EnableCaching
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class,args) ;
}
}
3、配置詳解
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">
<!-- 作業系統快取的臨時目錄,記憶體滿后寫入該目錄 -->
<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>
配置引數說明
maxElementsOnDisk:磁盤快取中最多可以存放的元素數量;
eternal:快取中物件是否永久有效;
timeToIdleSeconds:當eternal=false時使用,快取資料有效期(單位:秒),時間段內沒有訪問該元素,將被清除;
timeToLiveSeconds:快取資料的存活時間;
maxElementsInMemory:記憶體中最多可以存放的元素數量,overflowToDisk=true,則會將Cache中多出的元素放入磁盤檔案中,若overflowToDisk=false,則根據memoryStoreEvictionPolicy策略替換Cache中原有的元素;
diskExpiryThreadIntervalSeconds:磁盤快取的清理執行緒運行間隔;
memoryStoreEvictionPolicy:快取釋放策略,LRU會優先清理最少使用的快取;
localTempSwap:持久化策略,當堆記憶體或者非堆記憶體里面的元素已經滿了的時候,將其中的元素臨時的存放在磁盤上,重啟后就會消失;
三、注解用法
@Service
public class CacheService {
private static final Logger LOGGER = LoggerFactory.getLogger(CacheService.class);
@Resource
private UserMapper userMapper ;
@Cacheable(value="https://www.cnblogs.com/cicada-smile/p/userEntity") // 在快取有效期內,首次查詢才訪問資料庫
public UserEntity getById (Integer id){
// 通過日志,標識方法是否執行
LOGGER.info("getById..."+id);
return userMapper.selectById(id) ;
}
@CacheEvict(value="https://www.cnblogs.com/cicada-smile/p/userEntity",key = "#id") //該ID資料更新,清空該ID快取
public void updateUser(Integer id) {
UserEntity user = new UserEntity() ;
user.setId(id);
user.setUserName("myCache");
userMapper.updateById(user);
}
}
@Cacheable:注解標記在一個方法上,也可以標記在一個類上,標記在一個方法上表示該方法支持快取,該方法被呼叫后將其回傳值快取起來,下次同樣的請求引數執行該方法時可以直接從快取中獲取結果,而不需要再次執行該方法,
@CacheEvict:注解標記在需要清除快取元素的方法或類上的,當標記在一個類上時表示其中所有的方法的執行都會觸發快取的清除操作,并且可以按照指定屬性清除,
四、源代碼地址
GitHub·地址
https://github.com/cicadasmile/middle-ware-parent
GitEE·地址
https://gitee.com/cicadasmile/middle-ware-parent

推薦閱讀:SpringBoot進階系列
| 序號 | 文章標題 |
|---|---|
| 01 | Boot2 整合 shard-jdbc 中間件,實作資料分庫分表 |
| 02 | Boot2 整合 JavaMail ,實作異步發送郵件功能 |
| 03 | Boot2 整合 RocketMQ ,實作請求異步處理 |
| 04 | Boot2 整合 Swagger2 ,構建介面管理界面 |
| 05 | Boot2 整合 QuartJob ,實作定時器實時管理 |
| 06 | Boot2 整合 Redis集群 ,實作訊息佇列場景 |
| 07 | Boot2 整合 Dubbo框架 ,實作RPC服務遠程呼叫 |
| 08 | Boot2 整合 ElasticSearch框架,實作高性能搜索引擎 |
| 09 | Boot2 整合 JWT 框架,解決Token跨域驗證問題 |
| 10 | Boot2 整合 FastDFS 中間件,實作檔案分布管理 |
| 11 | Boot2 整合 Shiro 框架,實作用戶權限管理 |
| 12 | Boot2 整合 Security 框架,實作用戶權限管理 |
| 13 | Boot2 整合 ClickHouse資料庫,實作資料高性能查詢分析 |
| 14 | Boot2 整合 Drools規則引擎,實作高效的業務規則 |
| 15 | Boot2 整合 多資料源,配置MybatisPlus增強插件 |
| 16 | Boot2 整合 Zookeeper組件,管理架構中服務協調 |
| 17 | Boot2 整合Nacos組件,環境搭建和入門案例詳解 |
| 18 | 檔案系統(01):基于Boot2框架,管理Excel和PDF |
| 18 | 檔案系統(02):基于Boot2框架,管理Xml和CSV |
| 19 | Boot2 整合 Kafka組件,應用案例和流程詳解 |
| 20 | Boot2 整合 ElasticJob框架,定制化管理流程 |
| 21 | Boot2 整合JTA組件,多資料源事務管理 |
| 22 | Boot2 整合FreeMarker模板,完成頁面靜態化處理 |
| 23 | Boot2 整合MinIO中間件,實作檔案便捷管理 |
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/91776.html
標籤:Java
上一篇:java基礎之Thread筆記
