Oscache的强行更新机制

原创 2006年06月21日 20:18:00
背景 :
在产品中也许不需要强行更新,但是测试的时候往往需要。

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的强行更新机制

背景 :在产品中也许不需要强行更新,但是测试的时候往往需要。part 1当你强行更新缓存时会发生如下步骤:step1)GeneralCacheAdministrator.flushAll----->s...
  • freedomsky120
  • freedomsky120
  • 2007年12月24日 16:17
  • 475

OSCache页面缓存的基础入门

OSCache页面缓存 什么是OSCache? OSCache标记库由OpenSymphony设计,它是一种开创性的JSP定制标记应用,提供了在现有JSP页面之内实现快速内存缓冲的功能。OSC...
  • zymx14
  • zymx14
  • 2016年06月08日 00:19
  • 1141

oscache ehcache oscache与ehcache的区别

一.ehcache主要是对数据库访问的缓存,相同的查询语句只需查询一次数据库, 二. oscache 主要是对页面的缓存,可以整页或者指定网页某一部分缓存,同时 指定他的过期时间,这样在此时间段里...
  • hjm4702192
  • hjm4702192
  • 2012年08月23日 13:54
  • 7014

MyBatis3 配置OSCache

配置步骤很简单,大概分为: 1、
  • curiouslearnerdhh
  • curiouslearnerdhh
  • 2014年11月22日 11:00
  • 929

oscache如何缓存页面及如何强制清除指定页面的缓存

oscache如何缓存页面及如何强制清除指定页面的缓存
  • yh_zeng2
  • yh_zeng2
  • 2017年06月17日 01:11
  • 490

oscache.properties文件配置

1、cache.memory 是否使用内存缓存;值为:true或false。默认为true;如设置为false,那cache只能缓存到数据库或硬盘中。 2、cache.capacity 缓存...
  • sd4015700
  • sd4015700
  • 2014年07月16日 11:24
  • 1238

Oscache缓存总结

Oscache 一、基本概述 OSCache标记库由OpenSymphony设计,它是一种开创性的JSP定制标记应用,提供了在现有JSP页面之内实现快速内存缓冲的功能。OSCache是个一个广泛采...
  • w13240362354
  • w13240362354
  • 2016年07月17日 20:08
  • 3601

OSCache实现页面缓存

缓存技术有:页面缓存(View,html代码)缺点是不能做到实时更新,优点是比二级缓存性能更高;二级缓存(mode/业务层,domain对象)优点是实时更新  缓存产品有:EHCahce、OSCa...
  • sinat_29581293
  • sinat_29581293
  • 2016年08月12日 13:41
  • 1628

Java开源缓存框架 oscache下载、介绍使用

一、 OSCache 下载地址: https://java.net/downloads/oscache/ 二、 1. 下载、解压缩OSCache  从http://www.opensympho...
  • Shan_mei
  • Shan_mei
  • 2015年01月30日 13:39
  • 1278

MemCached,OsCache,EhCache区别

Memcache:分布式内存对象缓存系统,占用其他机子的内存。很多互联网,负载均衡三台(以三台为例)web服务器可以共享一台Memcache的资源。传递的信息以键值对的形式存储。传递的数据要实现序列化...
  • hongweideng
  • hongweideng
  • 2014年10月31日 18:06
  • 1269
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Oscache的强行更新机制
举报原因:
原因补充:

(最多只允许输入30个字)