一、前言
缓存技术在现代软件开发中扮演着越来越重要的角色,作为一个成熟的开源Java缓存库,Ehcache在提高应用性能、减少数据库负载、加速用户体验方面占有一席之地。本篇博客将全方位多角度地深入理解Ehcache,帮助大家把握其核心功能、实现原理及应用实例。
Ehcache是一个纯Java的进程内缓存框架,具有速度快、简单、可伸缩、可配置及提供多级缓存功能等优点,因此成为了许多开发者的首选缓存方案。
二、核心特性
Ehcache拥有以下核心特性:
- 简易性:易于配置和使用。
- 内存和磁盘存储:支持内存和磁盘两种缓存方式,甚至在JVM重启后可以恢复磁盘上的缓存。
- 缓存策略:提供多种缓存策略,如LRU(Least Recently Used),LFU(Least Frequently Used)等。
- 数据一致性:支持强一致性和最终一致性模型。
- 事务性缓存:支持JTA和XA事务标准,保证缓存操作的原子性。
- 集群缓存:通过Terracotta支持分布式缓存。
三、架构与工作原理
Ehcache的架构主要包含以下几部分:文章来源:https://www.toymoban.com/news/detail-806852.html
- Cache Manager:管理多个缓存实例。
- Cache:存放缓存数据的容器,包括内存和磁盘两级。
- Element:缓存的基本单元,包含key和value。
- Cache Eviction Policy:缓存驱逐策略负责决定哪些元素应该被移除。
四、性能优化
- 数据分区:将缓存数据进行逻辑分区,提高访问速度。
- 并发策略:Ehcache设计了多种并发策略以支持高并发环境。
- 缓存加载器:可用于启动时预加载数据,减少首次命中时的延迟。
五、与Springboot集成
- 首先开启缓存,添加@EnableCache注解
@EnableCaching
public class B2bFwk2CsB2bAdapterApplication {
- 添加cacheManager和Factory
@Component
public class CacheConfiguration{
@Bean
public EhCacheCacheManager ehCacheCacheManager(EhCacheManagerFactoryBean bean) {
return new EhCacheCacheManager(bean.getObject());
}
@Bean
public EhCacheManagerFactoryBean ehCacheManagerFactoryBean() {
EhCacheManagerFactoryBean cacheManagerFactoryBean = new EhCacheManagerFactoryBean();
cacheManagerFactoryBean.setConfigLocation(new ClassPathResource("ehcache.xml"));
cacheManagerFactoryBean.setShared(true);
return cacheManagerFactoryBean;
}
}
- 在resource路径下添加配置文件ehcache.xml,配置文件可以配置每个缓存的一些信息如最大数量,过期时间等等,也可以配置一个模板给具有相同配置的缓存使用。这里只举例配置了一个缓存叫csb2b_adapter_guildline。
<?xml version="1.0" encoding="UTF-8"?>
<ehcache>
<cache name="csb2b_adapter_guildline" maxElementsInMemory="1000" eternal="true"
timeToIdleSeconds="0" timeToLiveSeconds="0"/>
</ehcache>
- 然后就可以在具体的方法上面应用这个缓存,通过@Cacheable value来设置所使用的缓存,key来设置缓存的键,当调用这个方法时,会将参数按照配置的那样进行拼接,然后到csb2b_adapter_guildline里面找这个key是否存在,如果存在则进行返回,从而提高查询效率。
@Cacheable(value = "csb2b_adapter_guildline", key = "#tpId+'_'+#msgType+'_'+#msgFormat+'_'+#direction", unless = "#result == null")
CSB2BAdapterGuideline selectGuideline(String tpId, String msgType, String msgFormat, String direction);
六、xml文件的相关配置
Ehcache 的CacheManager构造函数或工厂方法被调用时,会默认加载 classpath 下名为ehcache.xml的配置文件。如果加载失败,会加载 Ehcache jar 包中的ehcache-failsafe.xml文件,这个文件中含有简单的默认配置。 ehcache.xml 配置参数说明:文章来源地址https://www.toymoban.com/news/detail-806852.html
- name:缓存名称。
- maxElementsInMemory:缓存最大个数。
- eternal:缓存中对象是否为永久的,如果是,超时设置将被忽略,对象从不过期。
- timeToIdleSeconds:设置对象在失效前的允许闲置时间(单位:秒)。仅当 eternal=false 对象不是永久有效时使用,可选属性,默认值是 0,也就是可闲置时间无穷大。
- timeToLiveSeconds:缓存数据的生存时间(TTL),也就是一个元素从构建到消亡的最大时间间隔值,这只能在元素不是永久驻留时有效,如果该值是 0 就意味着元素可以停顿无穷长的时间。
- maxEntriesLocalDisk:当内存中对象数量达到 maxElementsInMemory 时,Ehcache 将会对象写到磁盘中。
- overflowToDisk:内存不足时,是否启用磁盘缓存。
- diskSpoolBufferSizeMB:这个参数设置 DiskStore(磁盘缓存)的缓存区大小。默认是 30MB。每个 Cache 都应该有自己的一个缓冲区。
- maxElementsOnDisk:硬盘最大缓存个数。
- diskPersistent:是否在 VM 重启时存储硬盘的缓存数据。默认值是 false。
- diskExpiryThreadIntervalSeconds:磁盘失效线程运行时间间隔,默认是 120 秒。
- memoryStoreEvictionPolicy:当达到 maxElementsInMemory 限制时,Ehcache 将会根据指定的策略去清理内存。默认策略是 LRU(最近最少使用)。你可以设置为 FIFO(先进先出)或是 LFU(较少使用)。
- clearOnFlush:内存数量最大时是否清除。
到了这里,关于缓存框架Ehcache的介绍,且与Springboot的集成的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!