`
xitong
  • 浏览: 6188555 次
文章分类
社区版块
存档分类
最新评论

Oscache的强行更新机制

 
阅读更多
背景 :
在产品中也许不需要强行更新,但是测试的时候往往需要。

part 1
当你强行更新缓存时会发生如下步骤:
step1)
GeneralCacheAdministrator.flushAll----->

step2)
Cache.flushAll(Date date, String origin)

flushAll的源代码如下:
public void flushAll(Date date, String origin) {
//更新Cache的flushDateTime
flushDateTime = date;
//通知监听器更新事件,如果你没有注册监听器,这个方法没用
dispatchCachewideEvent(CachewideEventType.CACHE_FLUSHED, date, origin);
}

也就是说强行更新时仅仅只是修改Cache的flushDateTime 属性
并不是更改数据

part 2
接着你刷新页面看你的强行刷新时候有效果
step1)
Cache.getFromCache(String key, int refreshPeriod, String cronExpiry)---->
step2)
Cache.isStale(cacheEntry, refreshPeriod, cronExpiry)----->

看看isStale源代码:
protected boolean isStale(CacheEntry cacheEntry, int refreshPeriod, String cronExpiry) {
boolean result = cacheEntry.needsRefresh(refreshPeriod) || isFlushed(cacheEntry);


//cronExpiry 定义了绝对时间,通常你不会用,所以以下代码没用
if ((cronExpiry != null) && (cronExpiry.length() > 0)) {
try {
FastCronParser parser = new FastCronParser(cronExpiry);
result = result || parser.hasMoreRecentMatch(cacheEntry.getLastUpdate());
} catch (ParseException e) {
log.warn(e);
}
}

return result;
}

step3)
Cache.isFlushed(CacheEntry cacheEntry)

看看isFlushed源代码:
public boolean isFlushed(CacheEntry cacheEntry) {
if (flushDateTime != null) {
long lastUpdate = cacheEntry.getLastUpdate();

return (flushDateTime.getTime() >= lastUpdate);
} else {
return false;
}
}

从上面源代码看出,因为Cache的flushDateTime被更新,所以肯定会大于等于cacheEntry的最后更新时间,所以Cache会认为缓存的数据是stale的,于是从数据库重新取数据。


总而言之:强行更新只是做个标记,并不真正的获取新数据,下次从缓存读数据时,缓存会根据做的标记从数据更新数据,即使还没到更新的时候。
分享到:
评论

相关推荐

    oscache,缓存机制的使用

    oscache,java,缓存机制的使用

    oscache-2.1.jar

    oscache-2.1.jar oscache-2.1.jar

    OSCache配置说明文档

    OSCache由OpenSymphony设计,它是一种开创性的JSP定制标记应用,提供了在现有JSP页面之内实现快速内存缓冲的功能。OSCache是一个广泛采用的高性能的J2EE缓存框架,OSCache能用于任何Java应用程序的普通的缓存解决...

    oscache(JSP定制标记应用)

    javaweb做页面缓存常用,OSCache是一个工业级的J2EE缓存实现。OSCache不但能缓存java对象,还可以缓存页面,http请求和二进制内容,例如pdf文件等。通过应用OSCache,我们不但可以实现通常的Cache功能,还能够改善...

    oscache缓存技术入门实例

    oscache缓存技术入门实例

    用OSCache进行缓存对象

    1、OSCache是什么? 2、OSCache的特点 3、有关“用OSCache进行缓存对象”的研究

    OSCache学习例子 实例

    OSCache学习例子 实例 很好的与j2ee结合

    oscache文档

    OSCache标记库由OpenSymphony设计,它是一种开创性的JSP定制标记应用,提供了在现有JSP页面之内实现快速内存缓冲的功能。OSCache是个一个广泛采用的高性能的J2EE缓存框架,OSCache能用于任何Java应用程序的普通的...

    oscache的例子

    OSCache标记库由OpenSymphony设计,它是一种开创性的缓存方案,它提供了在现有JSP页面之内实现内存缓存的功能。OSCache是个一个被广泛采用的高性能的J2EE缓存框架,OSCache还能应用于任何Java应用程序的普通的缓存...

    Oscache框架的搭建步骤

    使用oscache进行缓存,大大提高web系统运行效率

    Oscache使用手册

    Cache是一种用于提高系统响应速度、改善系统运行性能的技术。尤其是在Web应用中,通过缓存页面的...OSCache是个一个被广泛采用的高性能的J2EE缓存框架,OSCache还能应用于任何Java应用程序的普通的缓存解决方案。。。。

    OSCache需要的包

    oscache.tld,oscahe.properties,oscache-2.1.jar,commons

    oscache 使用介紹

    OSCache是OpenSymphony这个开源项目众多Projects中的一个。他是一个高效的J2EE缓存框架,能够很好的解决动态网站速度的问题。

    oscache-java缓存框架

    oscache-java缓存框架插件和安装教程,使用教程一步到位

    oscache jar包下载

    oscache-2.4.1.jar资源包,用于java缓存、jsp页面缓存

    oscache说明

    oscache的简单介绍

    oscache的使用

    oscache的使用

    oscache详细配置文档

    本文叙述了如何使用oscanche,最后的配置需要在oscache.properties中完成

    oscache-2.2jar包

    oscache-2.2jar包

    oscache-2.3.jar

    oscache-2.3.jar

Global site tag (gtag.js) - Google Analytics