ConcurrentHashMap实现时效缓存
ECode1024官方
5
钻石
2019-01-25 17:22:36
缓存工具类代码:
[pre]
package cn.org.xinke.util;
import java.util.Date;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
* @description 缓存工具类
* @author cinco
* @date 2019-1-24
*/
public class CacheUtil {
/** 数据缓存map */
public static Map<String, Object> dataMap = new ConcurrentHashMap<>();
/** 数据缓存过期map */
public static Map<String, Date> dataExpireMap = new ConcurrentHashMap<>();
/**
* 将一个key、value值放入内存缓存,并设置过期分钟数
*
* @param key
* @param val
* @param expireMiute
*/
public static void put(String key, Object val, int expireMiute) {
dataMap.put(key, val);
dataExpireMap.put(key, addMinutes(expireMiute));
}
/**
* 从缓存中获取一个key的数据,若过期返回null
*
* @param cacheKey
* @return
*/
public static Object get(String cacheKey) {
Object obj = null;
Date expireDate = CacheUtil.dataExpireMap.get(cacheKey);
if (expireDate != null && expireDate.compareTo(new Date()) > 0) {
obj = CacheUtil.dataMap.get(cacheKey);
}
return obj;
}
/**
* 将有效时间(分钟)转成日期
*
* @param expireMiute
* @return Date
*/
public static Date addMinutes(int expireMiute){
long currentTime = System.currentTimeMillis();
currentTime += expireMiute * 1000 * 60;
Date date = new Date(currentTime);
return date;
}
}
[/pre]
利用定时任务清除失效数据:
[pre]
// 清除过期的分享文件信息, 每3秒钟执行一次
@Scheduled(cron = "0/3 * * * * ?")
public void clearShareCache() {
Map<String, Date> dataExpireMap = CacheUtil.dataExpireMap;
Set<String> keysExpire = dataExpireMap.keySet();
for (String t : keysExpire) {
Date expireDate = CacheUtil.dataExpireMap.get(t);
if (expireDate != null && expireDate.compareTo(new Date()) < 0) {
CacheUtil.dataMap.remove(t);
CacheUtil.dataExpireMap.remove(t);
}
}
}
[/pre]
声明:本文所有观点仅代表创作者本人,ECode1024系信息收集发布平台,ECode1024仅提供信息存储以及展示服务。若有侵权,请联系我们删除。