大家好: 用SoftReference 和static HashMap 做了一个全局的缓存。实现后发现没有做到全局缓存,换个用户登录后缓存就不起作用了。下面是代码,各位兄弟帮忙指点一下。谢谢了!CacheManagerV2 类public class CacheManagerV2{
private static HashMap cacheMap = new HashMap();
private static final CacheManagerV2 instance = new CacheManagerV2();
private static Object lock = new Object();
private CacheManagerV2() {
}
public static synchronized CacheManagerV2 getInstance() {
return instance;
}
// 判断是否存在一个缓存
public static synchronized boolean hasCache(String key) {
return cacheMap.containsKey(key);
}
//获取缓存信息
public Object getCacheInfo(String key) {
if (hasCache(key)) {
return ((SoftReference)cacheMap.get(key)).get();
} else
return null;
}
//载入缓存信息
public static synchronized void putCacheInfo(String key, Object obj) {
SoftReference softRef = new SoftReference(obj);
obj = null;
cacheMap.put(key, softRef);
}
CacheObjectManager 类public class CacheObjectManager {
public static Object getCache(String key,AbstractMDMCacheV2 object) throws MDMException{
Object obj = CacheManagerV2.getInstance().getCacheInfo(key);
if(null == obj){
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
obj = object.getObjectCommand();
CacheManagerV2.putCacheInfo(key, obj);
}
return obj;
}
}AbstractMDMCacheV2是个抽象类,有抽象方法getObjectCommand,继承的类实现具体的取数操作下面是调用String sort = "VWINIT";
GetRecordsByKeysCacheCommand getRecordByKes = new GetRecordsByKeysCacheCommand();
getRecordByKes.setSearchKey("EPID");
getRecordByKes.setSearchValue(new String[]{sort});
BusinessPartnerDO bp = (BusinessPartnerDO)CacheObjectManager.getCache(sort,getRecordByKes);
private static HashMap cacheMap = new HashMap();
private static final CacheManagerV2 instance = new CacheManagerV2();
private static Object lock = new Object();
private CacheManagerV2() {
}
public static synchronized CacheManagerV2 getInstance() {
return instance;
}
// 判断是否存在一个缓存
public static synchronized boolean hasCache(String key) {
return cacheMap.containsKey(key);
}
//获取缓存信息
public Object getCacheInfo(String key) {
if (hasCache(key)) {
return ((SoftReference)cacheMap.get(key)).get();
} else
return null;
}
//载入缓存信息
public static synchronized void putCacheInfo(String key, Object obj) {
SoftReference softRef = new SoftReference(obj);
obj = null;
cacheMap.put(key, softRef);
}
CacheObjectManager 类public class CacheObjectManager {
public static Object getCache(String key,AbstractMDMCacheV2 object) throws MDMException{
Object obj = CacheManagerV2.getInstance().getCacheInfo(key);
if(null == obj){
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
obj = object.getObjectCommand();
CacheManagerV2.putCacheInfo(key, obj);
}
return obj;
}
}AbstractMDMCacheV2是个抽象类,有抽象方法getObjectCommand,继承的类实现具体的取数操作下面是调用String sort = "VWINIT";
GetRecordsByKeysCacheCommand getRecordByKes = new GetRecordsByKeysCacheCommand();
getRecordByKes.setSearchKey("EPID");
getRecordByKes.setSearchValue(new String[]{sort});
BusinessPartnerDO bp = (BusinessPartnerDO)CacheObjectManager.getCache(sort,getRecordByKes);
解决方案 »
- 请教一个hibernate hql语句
- 在文章内容中添加关键字(请各位大师帮我优化下)
- Tomcat连接池问题
- 求助:关于JWS发布服务的问题,“找不到符号”
- 2006将离我们而去,新的一年来临!(纪念贴 + 散分啦!)
- Hibernate有什么缺点啊!!
- POI 导出excel 时Cannot get a error value from a numeric cell
- 请教防止用户多次登陆!请问有啥好方法?
- 請問在java如何判斷本地目錄存不存在
- 请教JBOSS部署JSP的问题
- hibernate 会自动排序?
- action向service或dao传参数,传哪种类型比较好???????????????????????
public class CacheManagerV2{
private static HashMap cacheMap = new HashMap();
// private static final CacheManagerV2 instance = new CacheManagerV2();
private static Object lock = new Object();
private CacheManagerV2() {
}
// public static synchronized CacheManagerV2 getInstance() {
// return instance;
// }
// 判断是否存在一个缓存
public static synchronized boolean hasCache(String key) {
return cacheMap.containsKey(key);
}
//获取缓存信息
public static Object getCacheInfo(String key) {
if (hasCache(key)) {
return ((SoftReference)cacheMap.get(key)).get();
} else
return null;
}
//载入缓存信息
public static synchronized void putCacheInfo(String key, Object obj) {
SoftReference softRef = new SoftReference(obj);
// obj = null;
cacheMap.put(key, softRef);
}
public static void clearGC(){
System.gc();
}
public static void clearCache(){
cacheMap.clear();
}
public static int getCacheSize(){
return cacheMap.size();
}
public static HashMap getCacheHashMap(){
return cacheMap;
}
}