由于需要做一个统一的缓存,我用的是spring的环绕通知,切入匹配的方法前从缓存服务器获取数据,现在的问题是特殊情况特殊处理,比如某种数据的缓存只在缓存服务器存在一分钟,其他默认的30分钟,这就需要我获得该方法取得数据的缓存时间,再存入缓存,但是环绕通知貌似只能获得参数值,没有拿到参数名的方法 代码如下,知道的同鞋指导讨论下啊
Object[] args = call.getArgs();
StringBuffer key = new StringBuffer();
key.append(call.getTarget().getClass().getName())
.append(".")
.append(call.getSignature().getName())
.append(".")
.append(genKeyByParam(args));
System.out.println("key为:" + key.toString());
System.out.println("加密后的key为:" + EncryptUtil.encodeMD5(key.toString()));
String md5KeyString = EncryptUtil.encodeMD5(key.toString());
//TODO 先到mongodb中查找,找不到再到memcached中找
Object result = null;
try{
result = mongoDB.getDFSFile(mongoDB.getMongo(), md5KeyString);
}catch(Exception e){
logger.warn("mongodb缓存连接出错");
}
if(null == result){
result = fetchDataFromMemcachCache(md5KeyString);
}
if("NULL".equalsIgnoreCase((String)result)){
return null;
}
if(null == result){
result = call.proceed();
int size = SizeCalculator.calcSize((Serializable) result);
if(size > ORVER_SIZE){
//TODO 如果result大于1M,则往mongod缓存中添加
byte[] byteArr = ObjectAndByte.toByteArray(result);
try{
mongoDB.uploadToDFS(md5KeyString, new ByteArrayInputStream(byteArr));
}catch(Exception e){
logger.warn("mongodb缓存连接出错");
}
}else{
if(null == result){
result = "NULL";
addToMemcachCache(md5KeyString,自定义的缓存时间,result);
return null;
}else{
addToMemcachCache(md5KeyString,result);
}
}
}
return result;
|