第三部分: 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;
- }
- }
- }
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();
- }
- }
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;
- }
- }
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) {
- }
- }
- }
- }