package com.xxxxx.xxxxxx.common.core.utils.bdCacheUtil;
import cn.hutool.cache.CacheUtil;
import cn.hutool.cache.impl.TimedCache;
import com.cnjnu.zhdd.common.core.utils.DateUtil.DateUtil;
/**
* 本地缓存工具类
*/
public class ControlDeviceCacheUtil {
// 限制 1 分钟 = 60秒
private static final long LIMIT_MINUTES = 1;
// 缓存时长:分钟(毫秒)
private static final long EXPIRE_MILLIS = LIMIT_MINUTES * 60 * 1000;
// 创建 Hutool 定时缓存:1分钟自动过期
private static final TimedCache<String, Long> TIMED_CACHE = CacheUtil.newTimedCache(EXPIRE_MILLIS);
static {
// 启动定时清理任务(每 10 秒清理一次过期缓存)
TIMED_CACHE.schedulePrune(10);
}
/**
* 检查是否可以操作
* @param deviceNo 设备编号
* @return null=可以操作;数字=剩余秒数(不能操作)
*/
public static Integer checkCanOperate(String deviceNo) {
long now = System.currentTimeMillis();
Long lastTime = TIMED_CACHE.get(deviceNo);
// 无缓存 → 允许操作
if (lastTime == null) {
TIMED_CACHE.put(deviceNo, now, EXPIRE_MILLIS);
return null;
}
// 计算已过时间
long pass = now - lastTime;
// 超过 → 允许操作,重新缓存
if (pass > EXPIRE_MILLIS) {
TIMED_CACHE.put(deviceNo, now, EXPIRE_MILLIS);
return null;
}
// 未超时 → 返回剩余秒数(向上取整,展示更友好)
long remainMs = EXPIRE_MILLIS - pass;
return (int) Math.ceil(remainMs / 1000.0);
}
public static void main(String[] args) {
System.out.println(checkCanOperate("dds"));
Integer i = checkCanOperate("dds");
System.out.println(i);
}
}
本地缓存工具类,带超时自动清除
最新推荐文章于 2026-06-18 22:31:57 发布

4710

被折叠的 条评论
为什么被折叠?



