如何使用Ehcache清除缓存数据库:一篇简要指南 (ehcache 清除缓存数据库)

在一个复杂的计算机系统中,缓存是一个非常重要的概念,它可以帮助系统提高性能和响应能力。但是,当缓存不得不被清除时,这个过程可能会让开发人员感到头疼。在Java领域中,有一个流行的缓存框架名为Ehcache,它提供了一系列的API来管理和操作缓存。在本篇文章中,我们将探讨如何使用Ehcache清除缓存数据库,提供一份简要指南。

1. 理解Ehcache中的缓存架构

在开始了解如何使用Ehcache清除缓存之前,我们需要先理解Ehcache中的缓存架构。在Ehcache中,所有的缓存项都存储在一个缓存对象中。每个缓存对象包含一个或多个缓存区域,每个缓存区域包含一个或多个缓存键值对。缓存键是一个唯一的字符串,它用来索引缓存值,而缓存值则是存储在缓存中的数据对象。

2. 使用Ehcache清除缓存

使用Ehcache清除缓存的方法有很多种,这里我们将介绍其中的两种常见方法。

我们可以使用Ehcache的API来清除缓存。以下是清除缓存的示例代码。

“`

CacheManager cacheManager = CacheManager.getInstance();

Cache cache = cacheManager.getCache(“myCache”);

cache.removeAll();

“`

在上述代码中,我们首先获取了一个 CacheManager 对象,然后通过 getCache() 方法获取了名为 myCache 的缓存对象。我们使用 removeAll() 方法来清除这个缓存对象中的所有缓存项。

另一种常见的方法是通过修改 Ehcache 配置文件来清除缓存。我们可以在 Ehcache 配置文件中设置一个 timeToIdleSeconds 的属性来控制缓存项的失效时间。当缓存项的失效时间到期之后,Ehcache 会自动将它们从缓存中清除。以下是在 Ehcache 配置文件中设置 timeToIdleSeconds 属性的示例代码。

“`

maxEntriesLocalHeap=”100″

timeToIdleSeconds=”60″

timeToLiveSeconds=”120″>

“`

在上述代码中,我们在Cache元素中增加了 timeToIdleSeconds 属性,并设置了它的值为 60 秒。这意味着,如果某个缓存项在 60 秒内没有被访问,那么它就会被自动清除。

3. 结语

本篇文章中,我们介绍了如何使用Ehcache清除缓存数据库,并提供了一份简要指南。Ehcache是一个非常流行的缓存框架,它提供了丰富的API来管理和操作缓存,在实际的开发中应用也非常广泛。希望本文对开发人员们有所帮助,对于Ehcache的更多高级操作,还需在实践中不断学习和探索。

相关问题拓展阅读:

  • ehcache java 对象缓存怎么实现
  • encache.index文件设置存放路径

ehcache java 对象缓存怎么实现

1.技术背景:

    系统缓存是位于应用程序与物理数据源之间,用于临时存放复制数据的内存区域,目的是为减少应用程序对物理数据源访问的次数,从而提高应用程序的运行性能。缓存设想内存是有限的,缓存的时效性也是有限的,所以可以设定内存数量的大小可以执行失效算法,可以在内存满了的情况下,按照最少访问等算法将缓存直接移除或切换到硬盘上。

    Ehcache从Hibernate发展而来,逐渐涵盖了Cache界的全部功能,是目前发展势头更好的一个项目,具有快速、简单、低消耗、扩展性强、支持对象或序列化缓存,支持缓存或元素的失效,提供LRU、LFU和FIFO缓存策略,支持内存缓存和硬盘缓存和分布式缓存机制等特点。其中Cache的存储方式为内存或磁盘(ps:无须担心容量问题)

2.EhCahe的类层次介绍:

    主要分为三层,最上层是CacheManager,它是操作Ehcache的入口。可以通过CacheManager.getInstance()获得一个单子的CacheManager,或者通过CacheManager的构造函数创建一个新的CacheManager。每个CacheManger都管理多个Cache。每个Cache都以一种类Hash的方式,关联多个Element。Element就是我们用于存放缓存内容的地方。

3.环境搭建:

    很简单只需要将ehcache-2.1.0-distribution.tar.gz和ehcache-web-2.0.2-distribution.tar.gz挤压的jar包放入WEB-INF/lib下。

    再创建一个重要的配置文件ehcache.xml,可以从ehcache组件包中拷贝一个,也可以自己建立一个,需要放到classpath下,一般放于/WEB-INF/classed/ehcache.xml;具体的配置文件可以网上搜一下

4.实际运用

    一个网站的首页估计是被访问次数最多的,我们可以考虑给首页做一个页面缓存;

    缓存策略:应该是某个固定时间之内不变的,比如说2分钟更新一次,以应用结构page-filter-action-service-dao-db为例。

    位置:页面缓存做到尽量靠近客户的地方,就是在page和filter之间,这样的优点就是之一个用户请求后,页面被缓存,第二个用户在请求,走到filter这个请求就结束了,需要在走到action-service-dao-db,好处当然是服务器压力大大降低和客户端页面响应速度加快。

    首页页面缓存存活时间定为2分钟,也就是参数timeToLiveSeconds(缓存的存活时间)应该设置为120,同时timeToIdleSeconds(多长时间不访问缓存,就清楚该缓存)更好也设为2分钟或者小于2分钟。



接着我们来看一下SimplePageCachingFilter 的配置,

   

indexCacheFilterfilter-name>

net.sf.ehcache.constructs.web.filter.SimplePageCachingFilter

indexCacheFilterfilter-name>

*index.actionurl-pattern>

   

将上述代码加入到web.xml,那么当打开首页时,你会发现2分钟才会有一堆sql语句出现在控制台,也可以调整为5分钟,总之一切尽在掌控之中。

 

当然,如果你像缓存首页的部分内容时,你需要使用SimplePageFragmentCachingFilter这个filter,我看一下:

indexCacheFilterfilter-name>

net.sf.ehcache.constructs.web.filter.SimplePageFragmentCachingFilter

filter>

indexCacheFilterfilter-name>

*/index_right.jsp

   

如此我们将jsp页面通过jsp:include到其他页面,这样就做到了页面局部缓存的效果,这一点貌似没有oscache的tag好用。

 

此外cachefilter中还有一个特性,就是gzip,也就是缓存中的元素是被压缩过的,如果客户端浏览器支持压缩的话,filter会直接返回压缩过的流,这样节省了带宽,把解压的工作交给了客户端浏览即可,当然如果客户端不支持gzip,那么filter会把缓存的元素拿出来解压后在返回给客户端浏览器(大多数爬虫是不支持gzip的,所以filter也会解压后在返回流)。

总之,Ehcache是一个非常轻量级的缓存实现,而且从1.2之后支持了集群,而且是hibernate默认的缓存provider,本文主要介绍Ehcahe对页面缓存的支持,但是它的功能远不止如此,要用好缓存,对J2ee中缓存的原理、适用范围、适用场景等等都需要比较深刻的理解,这样才能用好用对缓存。

 

为了大家通过实际例子加深了解与场景运用,在奉献一个实例:

*在Spring中运用EhCache

    适用任意一个现有开源Cache Framework,要求可以Cache系统中service或者DAO层的get/find等方法返回结果,如果数据更新(适用了Create/update/delete),则刷新cache中相应的内容。

    根据需求,计划适用Spring AOP+enCache来实现这个功能,采用ehCache原因之一就是Spring提供了enCache的支持,至于为何仅仅支持ehcache而不支持oscache和jbosscache就无从得知了。

    AOP少不了拦截器,先创建一个实现了MethodInterceptor接口的拦截器,用来拦截Service/DAO的方法调用,拦截到方法后,搜索该方法的结果在cache中是否存在,如果存在,返回cache中结果,如果不存在返回数据库查询结果,并将结果返回到缓存。

public class MethodCacheInterceptor implements MethodInterceptor, InitializingBean

{

private static final Log logger = LogFactory.getLog(MethodCacheInterceptor.class);

private Cache cache;

public void setCache(Cache cache) {

this.cache = cache;

}

public MethodCacheInterceptor() {

super();

}

/**

* 拦截Service/DAO 的方法,并查找该结果是否存在,如果存在就返回cache 中的值,

* 否则,返回数据库查询结果,并将查询结果放入cache

*/

public Object invoke(MethodInvocation invocation) throws Throwable {

String targetName = invocation.getThis().getClass().getName();

String methodName = invocation.getMethod().getName();

Object arguments = invocation.getArguments();

Object result;

logger.debug(“Find object from cache is ” + cache.getName());

String cacheKey = getCacheKey(targetName, methodName, arguments);

Element element = cache.get(cacheKey);

Page 13 of 26

if (element == null) {

logger.debug(“Hold up method , Get method result and create cache……..!”);

result = invocation.proceed();

element = new Element(cacheKey, (Serializable) result);

cache.put(element);

}

return element.getValue();

}

/**

* 获得cache key 的方法,cache key 是Cache 中一个Element 的唯一标识

* cache key 包括包名+类名+方法名,如com.co.cache.service.UserServiceImpl.getAllUser

*/

private String getCacheKey(String targetName, String methodName, Object arguments) {

StringBuffer  = new StringBuffer();

.append(targetName).append(“.”).append(methodName);

if ((arguments != null) && (arguments.length != 0)) {

for (int i = 0; i 

   

这里需要注意的是defaultCache定义了一个默认的cache,这个Cache不能删除,否则会抛出No default cache is configured异常。另外由于使用拦截器来刷新Cache内容,因此在定义cache生命周期时可以定义较大的数值,timeToIdleSeconds=””,timeToLiveSeconds=””,好像还不够大?

 

然后再将Cache和两个拦截器配置到Spring的配置文件cache.xml中即可,需要创建两个“切入点”,分别用于拦截不同方法名的方法。在配置application.xml并且导入cache.xml。这样一个简单的Spring+Encache框架就搭建完成。

EhCache里面有一个CacheManager类型,它负责管理cache。Cache里面存储着Element对象,Element必须是key-value对。Cache是实际物理实现的,在内存中或者磁盘。这些组件的逻辑表示就是下面即将要讨论的类。他们的方法提供了可编程的访问方式。

CacheManager

负责Cache的创建、访问、移除。

CacheManager创建

CacheManager支持两种创建模式:单例(Singleton mode)和实例(InstanceMode)。

在2.5之前的版本中,在同一个JVM中允许存在任意数量相同名字的CacheManager。每调用new CacheManager(…)一次,就会产生一个新的CacheManager实例,而不管已经存在多少个。调用CacheManager.create(…),则返回的是已经存在的那个配置对应的单例CacheManager,如果不存在,则创建一个。

2.5之后的版本,不允许在同一个JVM内存在多个具有相同名字的CacheManager。创建非单例实例的CacheManager()构造函数可能会打破这一规则,但是会抛出NPE异常。如果你的代码要在同一个JVM创建多个同名的实例,请使用静态方法CacheManager.create(),总是返回对应名的CacheManager(如果已经存在),否则创建一个

encache.index文件设置存放路径

在系统根目录有个 .FineReport110 文件夹,这个目录下的所有文件都是服务器生成的。

其中有个 ./ehcache_disk_store 文件,经常占用非常大的空间,导致根目录很容易就满了,那么怎么修改 ./ehcache_disk_store 存放路径呢?

1.2 实现思路

./ehcache_disk_store 里放的是两种类型的缓存文件,分别是:数据库二级缓存、文件服务器的缓存

操作时并不是直接修改 ./ehcache_disk_store 的路径,而是分别修改这两种缓存文件的路径。

2. 操作方法

2.1 修改数据库二级缓存路径

在工程目录 WEB-INF/config 文件夹下创建一个名为 ehcache.db.properties 的文件。

其中跟数据库二级缓存路径相关的配置见下图框出来的部分,可根据场景实际进行修改。

文件配置项如下:

# 数据库ehcache配置

  

# 是否禁用二级缓存,默认不禁用false

disableCache=false

 

# 堆中更大缓存空间,默认256M

maxBytesLocalHeap=1G

 

# 缓存是否常驻,true时timeToIdleSecond和timeToLiveSecond无效,默认false

eternal=false

 

# 使用后的空闲时间,默认120

timeToIdleSecond=120

 

# 创建后的存活时间,默认120

timeToLiveSecond=120

 

# 缓存过期策略,取值LRU,LFU,FIFO,CLOCK,默认LRU

memoryStoreEvictionPolicy=LRU

 

# 线程检查缓存超时的间隔时间,默认120

diskExpiryThreadIntervalSeconds=120

 

# 持久化类型,取值LOCALTEMPSWAP,DISTRIBUTED,LOCALRESTARTABLE,NONE,默认NONE

persistenceType=LOCALTEMPSWAP

# 指定数据库二级缓存路径

diskStore=C:\\Users\\root\\Desktop\\tmp\\db_cache

 

# 持久化同步写入,默认false

persistenceSynchronousWrites=false

  

# 每隔一段时间清理过期缓存,单位秒,默认60

recycleCacheMemoryInterval=60

 

# 每隔一段时间debug输出缓存使用情况(仅在调试时使用,同时日志级别需要调至DEBUG),单位秒,为0时不开启,默认0

reportCacheStatusInterval=0

2.2 修改文件服务器缓存路径

在 FineDB 的 fine_conf_entity 表中新增以下两个字段。新增字段时请直接连接到 FineDB 在表里手动修改,不支持使用 FINE_CONF_ENTITY可视化配置插件 配置。

FineDB 数据库类型和连接方法参见文档:FineDB数据库简介

字段值

ResourceCacheConfig.persistenceStrategyLOCALTEMPSWAP

ResourceCacheManagerConfig.diskStorePathdiskStore=C:\\Users\\root\\Desktop\\tmp\\resource_cache

ehcache 清除缓存数据库的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于ehcache 清除缓存数据库,如何使用Ehcache清除缓存数据库:一篇简要指南,ehcache java 对象缓存怎么实现,encache.index文件设置存放路径的信息别忘了在本站进行查找喔。

香港服务器首选树叶云,2H2G首月10元开通。
树叶云(www.IDC.Net)提供简单好用,价格厚道的香港/美国云服务器和独立服务器。IDC+ISP+ICP资质。ARIN和APNIC会员。成熟技术团队15年行业经验。

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/271049.html<

(0)
运维的头像运维
上一篇2025-05-08 02:43
下一篇 2025-05-08 02:44

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注