tip:如果要查看这一系列文章,可点击 这里
第三部分: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) { } } } }