`
former
  • 浏览: 96213 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Ehcache定时刷新

阅读更多

之前的文章介绍了在项目里使用Ehcache的经历,现在它可以很好的工作。但是现在用户来新需求了(他们一直有新需求的):

需要缓存定时刷新,如10:00,12:00,17:30.....(具体时间点用户给定),请注意是定时刷新,那么意味着缓存不但要失效,而且要能将新的数据填充的缓存里。

以往我们做的程序,是配置缓存多长时间(多少秒)失效,等用户再次请求后根据请求结果刷新缓存。看了一下ehcache的文档,好像未找到相应的内容。

解决办法:

目前暂时依赖容器做定时任务,通过代码刷新缓存。

更好的解决办法:

扩展(也许ehcache或者其他大牛已经做了)ehcache,使其能定时是缓存实效,并提供一个公共的接口,让业务代码实现,用于在缓存失效后立即刷新缓存。我的扩展方法不知道是否可行呢?或者大牛们有什么更好的实现,希望告知。。。

分享到:
评论
6 楼 Readonly 2007-04-20  
不是刷新,而是失效,目前ehcache的策略是放入的时候记录一个放入时间,它是用Lazy Evict的方式,在取的时候同设置的TTL比较一下就可以了,

偶们遇到的问题,如果想要通过扩展ehcache来实现,也可以用类似的方法:在取的时候需要同设置的时间点做比较,如果跨越了1个时间段,就失效了。这样就不需要在每个时间点都去清理cache,因为很有可能在N个时间段内,压根没有Hit。这样做的麻烦在于怎么解析设置cron job一样的表达式...所以偶还是宁愿用现成的schedule lib来做主动清理的动作。
5 楼 former 2007-04-20  
Readonly 写道
former 写道
Readonly 写道
偶们之前也有类似的需求,在ehcache mail list上问了,开发人员认为是一个性价比很低的功能,用任何schedule lib调用一下ehcache的clear API就搞定了,没有必要让ehcache为了这个小功能而引入额外的依赖。


的确,我现在的做法就是用schedule定时调用cache remove。只是这种需求多了,就要为了cache的定时刷新写一堆类似的代码。无论cache是否支持,工作其实没有少,因为要在clear cache之后及时将新的数据写入cache,而这个事只能自己定制代码。


难道你们的cache不是透明调用的吗?调用clear API以后,只需要调用一下使用了这个cache的方法,方法里面判断到cache中没有的话,就把执行的结果放入到cachae中了。
不过是写一个schedule job,然后配置一下,让它知道清理哪个cache,调用哪个方法而已,不需要一堆类似的代码。


应该是我没说清楚。之前cache的确是所谓透明调用,执行某个业务方法后触发cache。现在,需求是:假设cache中有X个element,那么根据某个规则,其中Y个需要定时刷新,X-Y个需要间隔Z秒刷新。我之前考虑是否可以用2个cache来分别处理,后来发现无论怎么处理,都要对这些element的key做判断,于是说“为了cache的定时刷新写一堆类似的代码”,并不是说cache刷新繁琐,纯粹是业务。

另外,您之前说:
Readonly 写道
没有必要让ehcache为了这个小功能而引入额外的依赖。

是指对schedule lib的依赖吗?那么它现在用于间隔多少秒刷新的做法,又是依赖什么呢?这个我会看一下。
4 楼 Readonly 2007-04-20  
former 写道
Readonly 写道
偶们之前也有类似的需求,在ehcache mail list上问了,开发人员认为是一个性价比很低的功能,用任何schedule lib调用一下ehcache的clear API就搞定了,没有必要让ehcache为了这个小功能而引入额外的依赖。


的确,我现在的做法就是用schedule定时调用cache remove。只是这种需求多了,就要为了cache的定时刷新写一堆类似的代码。无论cache是否支持,工作其实没有少,因为要在clear cache之后及时将新的数据写入cache,而这个事只能自己定制代码。


难道你们的cache不是透明调用的吗?调用clear API以后,只需要调用一下使用了这个cache的方法,方法里面判断到cache中没有的话,就把执行的结果放入到cachae中了。
不过是写一个schedule job,然后配置一下,让它知道清理哪个cache,调用哪个方法而已,不需要一堆类似的代码。
3 楼 former 2007-04-20  
Readonly 写道
偶们之前也有类似的需求,在ehcache mail list上问了,开发人员认为是一个性价比很低的功能,用任何schedule lib调用一下ehcache的clear API就搞定了,没有必要让ehcache为了这个小功能而引入额外的依赖。


的确,我现在的做法就是用schedule定时调用cache remove。只是这种需求多了,就要为了cache的定时刷新写一堆类似的代码。无论cache是否支持,工作其实没有少,因为要在clear cache之后及时将新的数据写入cache,而这个事只能自己定制代码。
2 楼 Readonly 2007-04-20  
偶们之前也有类似的需求,在ehcache mail list上问了,开发人员认为是一个性价比很低的功能,用任何schedule lib调用一下ehcache的clear API就搞定了,没有必要让ehcache为了这个小功能而引入额外的依赖。
1 楼 sunsy 2007-04-20  
那能不能做成是留一个监听的接口,在该缓存用到的相关信息改变时才刷新缓存,比如缓存了用户权限判断等,当管理员对某个用户的权限做了重新设置,此时相应的刷新缓存。

相关推荐

    EHCACHE简介

    EhCache是一个开源的、高性能的缓存解决方案,主要用于Java应用程序。它被广泛应用于提高应用程序的性能和响应速度,通过存储频繁访问的数据来减少数据库的负载。EhCache由Terracotta公司开发,并且已经成为Spring...

    Mybatis-ehcache 1.2.1源码(ehcache-cache-mybatis-ehcache-1.2.1.tar

    5. **缓存刷新**:当数据库中的数据发生变化时,Mybatis-ehcache 会通过监听机制或者定时任务来刷新对应的缓存,确保缓存与数据库数据的一致性。 6. **异常处理**:源码中包含了异常处理逻辑,当缓存操作出现问题时...

    ehcache-2.10.5-distribution.tar.gz

    6. **缓存策略**:包括缓存替换策略(如LRU、LFU、FIFO等)和缓存更新策略(如定时刷新、脏数据检测等)。 **Ehcache的主要特性:** 1. **内存和磁盘存储**:Ehcache支持内存和磁盘上的数据存储,当内存达到预设...

    本地缓存(一)ehcache/jcs/cache4j/jcs的性能测试与使用场景分析

    Cache4j提供了线程安全的缓存操作,支持定时刷新和过期策略,以及自定义缓存键值对的序列化和反序列化。由于其小巧的体积和简单的API,Cache4j适用于小型项目或者作为快速原型开发的工具。 接下来,我们来谈谈性能...

    ehCache在acegi中的应用

    4. **缓存更新策略**:ehCache支持多种缓存更新策略,如定时刷新、基于事件的刷新和手动刷新。在acegi中,可以根据实际需求选择合适的策略,确保缓存的数据始终保持最新。 5. **性能优化**:缓存的使用有助于提升...

    ehcache缓存页面.doc

    5. **缓存策略** - 如缓存淘汰(LRU、LFU、FIFO等)、缓存更新策略(定时刷新、脏数据检测等)和缓存加载策略(预加载、懒加载)。 6. **缓存对象** - 创建和管理缓存对象,包括设置缓存大小、过期时间、缓存key-...

    EHCache技术文档详解

    - **缓存策略**:包括缓存淘汰策略(如LRU、FIFO等)、缓存更新策略(如定时刷新、脏数据检测等)和缓存加载策略(如从数据库加载、从网络获取等)。 **2. 配置EHCache** - **ehcache.xml**:这是EHCache的主要...

    EHCache 分布式配置文件

    同时,还需要关注缓存更新策略(如事件监听、定时刷新等)和一致性模型(强一致、最终一致等)。 总结来说,EHCache 的分布式配置文件是实现高效、可靠的分布式缓存系统的核心,通过精细调整这些配置,我们可以优化...

    基于SpringBoot+Layui搭建的学生管理系统,融合shiro安全框架和Ehcache缓存框架.zip

    3. 缓存更新策略:根据需要配置缓存更新策略,如定时刷新、脏数据检测等。 总的来说,这个学生管理系统利用SpringBoot简化了后端开发,Layui提供了用户友好的界面,Shiro保障了系统安全,而Ehcache则提升了系统的...

    springMVC框架

    Ajax(Asynchronous JavaScript and XML)技术用于实现页面的异步更新,无需刷新整个页面即可获取或发送数据。在SpringMVC中,可以创建一个处理Ajax请求的方法,该方法使用@RequestBody或@RequestParam来接收前端...

    J2Cache - 基于内存和 Redis 的两级 Java 缓存框架

    同时,J2Cache 还支持缓存更新策略,例如定时刷新、失效后刷新或手动刷新,以保持缓存数据的新鲜度。 **配置与使用** 配置 J2Cache 涉及到设置一级缓存实现(如 Ehcache 或 Caffeine)以及连接到 Redis 服务器。这...

    EHcatchEHcatch缓存jar包

    - **缓存更新策略**:根据业务需求选择合适的缓存更新策略,如定时刷新、事件触发等。 - **缓存监控**:通过日志或监控工具,监控缓存的使用情况,及时调整配置。 7. **与Spring框架的整合** 在Spring应用中,...

    hibernate5.1二级缓存包

    4. **缓存策略**:可以配置缓存更新策略,比如定时刷新、脏数据检测等,以确保缓存中的数据及时更新。 5. **查询缓存**:除了对象级别的缓存,还可以配置查询缓存,将 SQL 查询结果缓存起来,减少对数据库的访问。...

    与shiro相关的jar包

    通过Shiro-quartz,你可以设置定时任务来管理Shiro的安全策略,例如定期刷新权限信息。 3. **shiro-spring**: 这个jar包是Shiro与Spring框架的整合,使得Shiro可以通过Spring的依赖注入和AOP(面向切面编程)功能...

    缓存配置文件

    6. **缓存更新策略**:包括定时刷新、脏数据检测等,可以通过`<property name="hibernate.cache.region.factory_class">`来选择合适的工厂类,如`org.hibernate.cache.ehcache.EhCacheRegionFactory`。 7. **并发...

    Hibernate缓存示例

    4. **定时刷新策略**:根据预设的时间间隔定期更新缓存。 **四、缓存的优化与注意事项** 1. **缓存大小**:合理设置缓存大小,避免内存溢出。 2. **缓存穿透**:防止无效数据的查询导致缓存击穿,可以使用布隆...

    SpringMVC+Nutz框架介绍.pdf

    前端技术包括Jquery、Bootstrap和Pjax,其中Pjax用于实现页面的无刷新加载,提高用户体验。Beetl是一个强大的模板引擎,支持多种语言国际化,可以直接使用汉字,无需Unicode转换。此外,框架还提供了方法级别的日志...

    hibernate二级缓存

    3. **缓存更新策略**:适时刷新缓存,如定时刷新、脏数据检测刷新等。 **六、注意事项** 1. **数据一致性**:二级缓存在提高效率的同时,可能带来数据一致性问题,需谨慎处理并发场景。 2. **缓存穿透**:当...

    hibernate 缓存策略

    3. **缓存更新策略**:根据业务场景选择合适的缓存更新策略,例如定时刷新、事件驱动刷新或手动刷新等。 4. **缓存穿透**:防止无效数据进入缓存,可能导致大量请求直接穿透到数据库,可使用布隆过滤器等手段进行...

    Hibernate 缓存管理

    - **使用策略**:根据业务需求选择合适的数据过期策略,如定时刷新、按需刷新或手动刷新。 3. **查询缓存** - **功能**:缓存查询结果,避免多次执行相同的SQL语句。 - **注意点**:由于查询结果可能包含不一致...

Global site tag (gtag.js) - Google Analytics