用HashMap封装一个内置缓存:
开楼吧:
首先搭个框架:
SpringBoot+Mybatis
?然后编写内置缓存:
/**
* 内置缓存工具类
*/
public class JvmMapCacheUtils {
/**
* 缓存容器
*/
private static Map<String,String> caches = new ConcurrentHashMap<>();
/**
*根据key获取缓存List对象
* @param key
* @param t
* @param <T>
* @return
*/
public static <T> List<T> listEntity(String key, Class<T> t){
//return JSONObject.parseObject(caches.get(key),t);
return JSONObject.parseArray(caches.get(key),t);
}
/**
* 存放对象
* @param key
* @param o
*/
public static void put(String key,Object o){
caches.put(key,JSONObject.toJSONString(o));
}
/**
* 存放单个对象
* @param key
* @param t
* @param <T>
* @return
*/
public static <T> T getEntity(String key, Class<T> t){
return JSONObject.parseObject(caches.get(key),t);
}
}
我们来测试下:
/**
* 查询出用户
*
*
* @throws
*/
@PostMapping("/listUser")
public ResponseMessage listUser(HttpServletRequest request){
ResponseMessage responseMessage = new ResponseMessage(0);
try{
String token = request.getHeader("token");
logger.info("token的值:【{}】"+token);
List<User> user = null;
user = JvmMapCacheUtils.listEntity(token, User.class);
//如果等于空
if(StringUtils.isEmpty(user)){
//模拟耗时时间
Thread.sleep(1000);
JvmMapCacheUtils.put(token,userService.getUser());
responseMessage.setMessage(userService.getUser());
}else {
responseMessage.setMessage(user);
}
}catch (Exception ex){
logger.error("查询用户信息信息异常", ex);
throw new RuntimeException(ex.getMessage());
}
return responseMessage;
}
走数据库耗时1270毫秒多
?走缓存,耗时9毫秒
?
|