ConcurrentHashMap实现缓存功能

java 复制代码
public class CacheUtil<K, V>{
    private final ConcurrentHashMap<K, CacheEntry<V>> cache = new ConcurrentHashMap<>();
    private final long ttl; // 缓存过期时间,单位:毫秒

    // 缓存条目类
    private static class CacheEntry<V> {
        V value;
        long expirationTime;

        CacheEntry(V value, long ttl) {
            this.value = value;
            this.expirationTime = System.currentTimeMillis() + ttl;
        }

        boolean isExpired() {
            return System.currentTimeMillis() > expirationTime;
        }
    }

    public CacheUtil(long ttl) {
        this.ttl = ttl; // 设置缓存的过期时间
    }

    // 添加缓存
    public void put(K key, V value) {
        cache.put(key, new CacheEntry<>(value, ttl));
    }

    // 获取缓存
    public V get(K key) {
        CacheEntry<V> entry = cache.get(key);
        if (entry == null || entry.isExpired()) {
            // 如果条目不存在或已过期,则移除并返回 null
            cache.remove(key);
            return null;
        }
        return entry.value;
    }

    // 清除缓存
    public void remove(K key) {
        cache.remove(key);
    }

    // 清空整个缓存
    public void clear() {
        cache.clear();
    }

    // 检查缓存是否存在
    public boolean containsKey(K key) {
        return cache.containsKey(key) && !cache.get(key).isExpired();
    }
}
java 复制代码
@Component
public class DingDingJobAlarm implements JobAlarm {
// 创建一个缓存工具,设置 TTL 为 一天
    private final CacheUtil<String, List<XxlJobGroup>> cache = new CacheUtil<>(60 * 1000 * 60 * 24);

@Override
    public boolean doAlarm(XxlJobInfo info, XxlJobLog jobLog) {
String redisKey = "spy:xxljob:group:info";

try {

List<XxlJobGroup> xxlJobGroups = cache.get(redisKey);
            if (CollectionUtils.isEmpty(xxlJobGroups) || !cache.containsKey(redisKey)) {
                xxlJobGroups = xxlJobGroupDao.findAll();
                cache.put(redisKey, xxlJobGroups);
            }


}catch (Exception e) {
            log.error("xxlJob系统发送钉钉消息异常=", e);
        }
}

}

xxlJobGroups 就是我的目标数据

java 复制代码
package com.xxl.job.admin.core.model;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;

/**
 * Created by xuxueli on 16/9/30.
 */
public class XxlJobGroup {

    private int id;
    private String appname;
    private String title;
    private int addressType;        // 执行器地址类型:0=自动注册、1=手动录入
    private String addressList;     // 执行器地址列表,多地址逗号分隔(手动录入)
    private Date updateTime;

    // registry list
    private List<String> registryList;  // 执行器地址列表(系统注册)
    public List<String> getRegistryList() {
        if (addressList!=null && addressList.trim().length()>0) {
            registryList = new ArrayList<String>(Arrays.asList(addressList.split(",")));
        }
        return registryList;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getAppname() {
        return appname;
    }

    public void setAppname(String appname) {
        this.appname = appname;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public int getAddressType() {
        return addressType;
    }

    public void setAddressType(int addressType) {
        this.addressType = addressType;
    }

    public String getAddressList() {
        return addressList;
    }

    public Date getUpdateTime() {
        return updateTime;
    }

    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }

    public void setAddressList(String addressList) {
        this.addressList = addressList;
    }

}
相关推荐
Bruce_Liuxiaowei11 分钟前
Netstat高级分析工具:Windows与Linux双系统兼容的精准筛查利器
linux·运维·网络·windows·安全
Par@ish1 小时前
【网络安全】恶意 Python 包“psslib”仿冒 passlib,可导致 Windows 系统关闭
windows·python·web安全
段帅龙呀8 小时前
Redis构建缓存服务器
服务器·redis·缓存
emplace_back10 小时前
C# 集合表达式和展开运算符 (..) 详解
开发语言·windows·c#
一禅(OneZen)14 小时前
「Windows/Mac OS」AIGC图片生成视频 ,webui + stable-diffusion环境部署教程
windows·stable diffusion
AirDroid_cn14 小时前
OPPO手机怎样被其他手机远程控制?两台OPPO手机如何相互远程控制?
android·windows·ios·智能手机·iphone·远程工作·远程控制
小龙在山东17 小时前
Python 包管理工具 uv
windows·python·uv
昏睡红猹17 小时前
我在厂里搞wine的日子
windows·wine
love530love20 小时前
Docker 稳定运行与存储优化全攻略(含可视化指南)
运维·人工智能·windows·docker·容器
夜斗小神社1 天前
【黑马点评】(二)缓存
缓存