Java之简易key过期管理器
简易key过期管理器,不想为了这点小功能去使用redis;
思路:key过期管理器,重点就在自动删除过期的key,我不想用定时任务或者创建一根线程定时去维护key,可以用事件驱动去删除过期的key,当校验key是否存在和存放新的过期key时会触发清理过期key的操作;
代码如下所示:
// key-过期时间 private static ConcurrentHashMap<String, LocalDateTime> expiredKeyMap = new ConcurrentHashMap<>(10); /** * 方法描述:设置key的过期时间 * @param key key * @param second 存活时间(秒) */ public static void putExpiredKey(String key, long second) { clearExpiredKey(); LocalDateTime expiredDate = LocalDateTime.now().plusSeconds(second); expiredKeyMap.put(key, expiredDate); } /** * 方法描述:key是否存活 * @param key * @return */ public static boolean isExist(String key) { if(expiredKeyMap.isEmpty()) { return false; } clearExpiredKey(); return expiredKeyMap.containsKey(key); } /** * 方法描述:清理过期的key */ private static void clearExpiredKey() { LocalDateTime now = LocalDateTime.now(); Iterator<Map.Entry<String, LocalDateTime>> iterator = expiredKeyMap.entrySet().iterator(); while (iterator.hasNext()) { Map.Entry<String, LocalDateTime> next = iterator.next(); LocalDateTime expiredDate = next.getValue(); // 过期时间等于当前时间 或者 过期时间在当前时间之前 if(now.equals(expiredDate) || now.isAfter(expiredDate)) { iterator.remove(); } } }
调用代码:
// 校验key是否存在 boolean flag = CacheManager.isExist("key"); // key不存在 if(!flag) { // 设置5秒过期的key CacheManager.putExpiredKey("key", 5); }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步