/**
*
* <p>Description: </p>
* @param key 缓存key
* @param expire 缓存失效时间
* @param clazz
* @param loadBack 缓存为空之后执行的方法
* @return
*/
private Logger logger = LoggerFactory.getLogger(CaCheServiceTempl.class);
public <T> T getCaChe(String key,Date expire,TypeReference<T> clazz,CaCheServiceI<T> loadBack){
String json = RedisUtil.get(key);//此处使用redis缓存
if(StringUtils.isNotEmpty(json)&& !json.equalsIgnoreCase("null")) {
logger.info("cache===获取redish中的值:"+json);
//转换有问题 因为redis数据转换失败 没有解决
return JSON.parseObject(json, clazz );
}
else {
synchronized(this) {
json = RedisUtil.get(key);
if(StringUtils.isNotEmpty(json)&&json.equalsIgnoreCase("null")) {
return JSON.parseObject(json, clazz);
}
T result = loadBack.loadBack();
if(result != null) {
RedisUtil.set(key, result.toString());
}
return result;
}
}
}
解决缓存击穿问题
最新推荐文章于 2025-03-09 12:06:26 发布