本文转载于:
http://shijincheng0223.iteye.com/blog/1412128
如需转载,需注明转载地址,谢谢!
OSCache使用指南
CacheFilter
com.opensymphony.oscache.web.filter.CacheFilter
time
600
scope
session
CacheFilter
*.jsp
<% //自己的JSP代码内容 %>
2. 用自己指定的字符串标识缓存内容,并且设定作用范围为session。
<% //自己的JSP代码内容 %>
3.动态设定key值,使用自己指定的time属性设定缓存内容的超时时间,使用动态refresh值决定是否强制内容刷新。
<% //自己的JSP代码内容 %>
<% //自己的JSP代码内容 %>
<% //自己的JSP代码内容 %>
<% //自己的JSP代码内容 %>
CacheFilter
com.opensymphony.oscache.web.filter.CacheFilter
CacheFilter
/testContent.jsp
CacheFilter
com.opensymphony.oscache.web.filter.CacheFilter
CacheFilter
*.jsp
CacheFilter
com.opensymphony.oscache.web.filter.CacheFilter
time
600
scope
session
CacheFilter
*.jsp
import java.util.Date;
import com.opensymphony.oscache.base.NeedsRefreshException;
import com.opensymphony.oscache.general.GeneralCacheAdministrator;
public class BaseCache extends GeneralCacheAdministrator {
private int refreshPeriod; //过期时间(单位为秒);
private String keyPrefix; //关键字前缀字符;
private static final long serialVersionUID = -4397192926052141162L;
public BaseCache(String keyPrefix,int refreshPeriod){
super();
this.keyPrefix = keyPrefix;
this.refreshPeriod = refreshPeriod;
}
//添加被缓存的对象;
public void put(String key,Object value){
this.putInCache(this.keyPrefix+"_"+key,value);
}
//删除被缓存的对象;
public void remove(String key){
this.flushEntry(this.keyPrefix+"_"+key);
}
//删除所有被缓存的对象;
public void removeAll(Date date){
this.flushAll(date);
}
public void removeAll(){
this.flushAll();
}
//获取被缓存的对象;
public Object get(String key) throws Exception{
try{
return this.getFromCache(this.keyPrefix+"_"+key,this.refreshPeriod);
} catch (NeedsRefreshException e) {
this.cancelUpdate(this.keyPrefix+"_"+key);
throw e;
}
}
}
2、Cache管理类
public class CacheManager {
private BaseCache newsCache;
private static CacheManager instance;
private static Object lock = new Object();
private CacheManager() {
//这个根据配置文件来,初始BaseCache而已;
newsCache = new BaseCache("news",120);
}
public static CacheManager getInstance(){
if (instance == null){
synchronized( lock ){
if (instance == null){
instance = new CacheManager(); }
}
}
return instance;
}
public void removeAllNews() {
newsCache.removeAll();
}
public void putUser(User news) { newsCache.put(news.getId()+"",news); }
public void removeUser(String newsID) { newsCache.remove(newsID); }
public User getUser(int newsID) {
try {
return (User) newsCache.get(newsID+"");
} catch (Exception e) {
System.out.println("getNews>>newsID["+newsID+"]>>"+e.getMessage());
User news = new User(newsID);
this.putUser(news);
return news;
}
}
}
3、对象Bean
public class User {
private int id;
private String name;
private String sex;
private int age;
private Date accessTime; public User(int id) {
super();
this.id = id;
this.accessTime = new Date(System.currentTimeMillis());
}
public String toString() {
return "User info is : id=" + id + " accessTime="
+ accessTime.toString();
}
public User(String name, String sex, int age) {
super();
this.name = name;
this.sex = sex;
this.age = age;
}
public User() {
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public Date getAccessTime() {
return accessTime;
}
public void setAccessTime(Date accessTime) {
this.accessTime = accessTime;
}
}
4、测试类
public class TestObjectCache {
public static void main(String[] args) {
CacheManager cm=CacheManager.getInstance();
TestObjectCache test=new TestObjectCache();
test.print(cm);
}
public void print(CacheManager cm){
User user=null;
for (int i = 0; i < 1000; i++) {
user=cm.getUser(100);
System.out.println("<<"+i+">>: "+user);
if(i==10){
//删除缓存id的对象
cm.removeUser(100+"");
}
if(i==20){
//删除所有缓存的对象
cm.removeAllNews();
}
// 睡眠部分
try {
Thread.sleep(30000);
} catch (Exception e) {
}
}
}
}
CacheManager 类
public class CacheManager {
private BaseCache newsCache;
private static CacheManager instance;
private static Object lock = new Object();
private CacheManager() {
// 这个根据配置文件来,初始BaseCache而已;
newsCache = new BaseCache("hrms", 300);
}
public static CacheManager getInstance() {
if (instance == null) {
synchronized (lock) {
if (instance == null) {
instance = new CacheManager();
}
}
}
return instance;
}
public void put(Object news,String key,String[] groups) {
newsCache.put(key, news,groups);
}
public void remove(String key) {
newsCache.remove(key);
}
public Object get(String key) {
try {
return newsCache.get(key);
} catch (Exception e) {
return null;
}
}
public void removeAll() {
newsCache.removeAll();
}
public void removeObjectByGroup(String group){
newsCache.removeObjectByGroup(group);
}
}
BaseCache 类增加的2个方法如下:
// 添加被缓存的对象;
public void put(String key, Object value,String[] groups) {
this.putInCache(this.keyPrefix + "_" + key, value,groups);
}
//删除该组的缓存对象
public void removeObjectByGroup(String group){
this.flushGroup(group);
}
private CacheManager cm;
private final static String CACHE_KEY_SUB="RetJobs";
public JobAction() {
//获取缓存管理对象
cm = CacheManager.getInstance();
}
查询部分
page=(Page)(cm.get(CACHE_KEY_SUB+"_"+currentPage));
if(page==null){
//--------------------需要缓存对象部分-----------------------
page = retJobBaseModel.getJobs(currentPage, pageSize, statusCondition);
//-------------------------------------------
//缓存对象(含所属分组信息)
cm.put(page, CACHE_KEY_SUB+"_"+currentPage,new String[]{CACHE_KEY_SUB});
}
//CUD操作部分
setCacheDisabled(CACHE_KEY_SUB);
private void setCacheDisabled(String group) {
//通过组别信息来删除缓存的对象。
cm.removeObjectByGroup(group);
}
----------------------------------------偶很华丽-----------------------