<% @ taglib uri = " oscache " prefix = " cache " %>
< cache:flush group = " device_types " scope = " application " />
但是有时需要在java代码中刷新缓存,以下这个OSCacheUtil类可以工作,但是只能在webwork环境内调用:
import
javax.servlet.jsp.PageContext;
import org.apache.log4j.Logger;
import com.opensymphony.oscache.base.Cache;
import com.opensymphony.oscache.web.ServletCacheAdministrator;
import com.opensymphony.webwork.ServletActionContext;
/**
* osCache缓存工具类.
* 只能在webwork环境内调用
*
* <p>Copyright: Copyright (c) 2005</p>
* <p>Company: </p>
* @author 杨杰荣
* @version 1.0
*/
public class OSCacheUtil
{
private static final Logger log = Logger.getLogger( OSCacheUtil.class );
public static final int ALL_SCOPE = 0;
public static final int SESSION_SCOPE = PageContext.SESSION_SCOPE;
public static final int APPLICATION_SCOPE = PageContext.APPLICATION_SCOPE;
private static ServletCacheAdministrator admin = null;
private OSCacheUtil()
{
}
/**
* 刷新osCache组
* @param group Cache组名
* @param cacheScope Cache范围,只能是SESSION_SCOPE或APPLICATION_SCOPE
*/
public static void flushGroup( String group, int cacheScope )
{
initCacheAdmin();
if ( cacheScope == SESSION_SCOPE || cacheScope == APPLICATION_SCOPE )
{
Cache cache = admin.getCache( ServletActionContext.getRequest(),
cacheScope );
cache.flushGroup( group );
}
else
{
log.warn( "A cache group was specified for flushing, but the scope wasn't supplied or was invalid" );
}
}
/**
* 刷新osCache中的某个key'
* @param key String
* @param cacheScope Cache范围,只能是SESSION_SCOPE或APPLICATION_SCOPE
*/
public static void flushKey( String key, int cacheScope )
{
initCacheAdmin();
if ( cacheScope == SESSION_SCOPE || cacheScope == APPLICATION_SCOPE )
{
String actualKey = admin.generateEntryKey(
key, ServletActionContext.getRequest(), cacheScope, null );
Cache cache = admin.getCache( ServletActionContext.getRequest(), cacheScope );
cache.flushEntry( actualKey );
}
else
{
log.warn( "A cache key was specified for flushing, but the scope wasn't supplied or was invalid" );
}
}
/**
* 刷新所有的osCache
* @param cacheScope Cache范围,可以是SESSION_SCOPE,APPLICATION_SCOPE,ALL_SCOPE
*/
public static void flushAll( int cacheScope )
{
initCacheAdmin();
if ( cacheScope == SESSION_SCOPE || cacheScope == APPLICATION_SCOPE )
{
admin.setFlushTime( cacheScope );
}
else
{
admin.flushAll();
}
}
private static void initCacheAdmin()
{
if ( admin == null )
{
admin = ServletCacheAdministrator.getInstance( ServletActionContext.
getServletContext() );
}
}
官网http://www.opensymphony.com/oscache/api/
import org.apache.log4j.Logger;
import com.opensymphony.oscache.base.Cache;
import com.opensymphony.oscache.web.ServletCacheAdministrator;
import com.opensymphony.webwork.ServletActionContext;
/**
* osCache缓存工具类.
* 只能在webwork环境内调用
*
* <p>Copyright: Copyright (c) 2005</p>
* <p>Company: </p>
* @author 杨杰荣
* @version 1.0
*/
public class OSCacheUtil
{
private static final Logger log = Logger.getLogger( OSCacheUtil.class );
public static final int ALL_SCOPE = 0;
public static final int SESSION_SCOPE = PageContext.SESSION_SCOPE;
public static final int APPLICATION_SCOPE = PageContext.APPLICATION_SCOPE;
private static ServletCacheAdministrator admin = null;
private OSCacheUtil()
{
}
/**
* 刷新osCache组
* @param group Cache组名
* @param cacheScope Cache范围,只能是SESSION_SCOPE或APPLICATION_SCOPE
*/
public static void flushGroup( String group, int cacheScope )
{
initCacheAdmin();
if ( cacheScope == SESSION_SCOPE || cacheScope == APPLICATION_SCOPE )
{
Cache cache = admin.getCache( ServletActionContext.getRequest(),
cacheScope );
cache.flushGroup( group );
}
else
{
log.warn( "A cache group was specified for flushing, but the scope wasn't supplied or was invalid" );
}
}
/**
* 刷新osCache中的某个key'
* @param key String
* @param cacheScope Cache范围,只能是SESSION_SCOPE或APPLICATION_SCOPE
*/
public static void flushKey( String key, int cacheScope )
{
initCacheAdmin();
if ( cacheScope == SESSION_SCOPE || cacheScope == APPLICATION_SCOPE )
{
String actualKey = admin.generateEntryKey(
key, ServletActionContext.getRequest(), cacheScope, null );
Cache cache = admin.getCache( ServletActionContext.getRequest(), cacheScope );
cache.flushEntry( actualKey );
}
else
{
log.warn( "A cache key was specified for flushing, but the scope wasn't supplied or was invalid" );
}
}
/**
* 刷新所有的osCache
* @param cacheScope Cache范围,可以是SESSION_SCOPE,APPLICATION_SCOPE,ALL_SCOPE
*/
public static void flushAll( int cacheScope )
{
initCacheAdmin();
if ( cacheScope == SESSION_SCOPE || cacheScope == APPLICATION_SCOPE )
{
admin.setFlushTime( cacheScope );
}
else
{
admin.flushAll();
}
}
private static void initCacheAdmin()
{
if ( admin == null )
{
admin = ServletCacheAdministrator.getInstance( ServletActionContext.
getServletContext() );
}
}
官网http://www.opensymphony.com/oscache/api/