ConcurrentHashMap实现时效缓存

文章 未结 精帖 0 1.35w
无法显示用户头像
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]

上一篇: Nginx 出现 "413 Request Entity Too Large" 问题解决

下一篇: 谈谈如何正确合理的设计一个接口项目?

声明:本文所有观点仅代表创作者本人,ECode1024系信息收集发布平台,ECode1024仅提供信息存储以及展示服务。若有侵权,请联系我们删除。
回复
  • 暂无任何回复,抢个沙发吧~~
layui

微信扫码关注 ECode1024 公众号带给你更多优质内容