浏览 2361 次
锁定老帖子 主题:Cache技术――OSCache(四)
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-10-26
第三部分: Demo 一、对象缓存 1 、 Cache 操作类 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 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; } } public void removeAllNews() { newsCache.removeAll(); } } 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) { } } } }
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |