All Downloads are FREE. Search and download functionalities are using the official Maven repository.

top.lingyuzhao.utils.CacheUtils Maven / Gradle / Ivy

The newest version!
package top.lingyuzhao.utils;

import top.lingyuzhao.utils.dataContainer.KeyValue;

import java.util.HashMap;
import java.util.TimerTask;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 缓存工具包 一般是使用 key 代表的是被缓存的数据的标识,value 代表的是被缓存的数据本身 value 中的第一个参数是被缓存数据的过期时间
 * 

* Caching toolkits generally use key to represent the identifier of the cached data, and value represents the cached data itself. The first parameter in value is the expiration time of the cached data * * @author zhao */ public class CacheUtils extends ConcurrentHashMap> { private final static HashMap HASH_MAP = new HashMap<>(); private final String cacheName; private final long time; /** * 构造方法 * * @param cacheName 缓存工具名称 * @param time 此缓存工具的所有缓存的过期时间 */ public CacheUtils(String cacheName, long time) { this.cacheName = cacheName; this.time = time; } /** * 设置缓存工具 * * @param cacheName 需要获取到的缓存工具的名称 * @param time 此缓存工具的所有缓存的过期时间 * @return 对应的缓存工具的实例 */ public static CacheUtils getCacheUtils(String cacheName, long time) { // 注册缓存对象 或返回 return HASH_MAP.computeIfAbsent(cacheName, k -> new CacheUtils(cacheName, time)); } /** * 移除缓存工具 * * @param cacheName 需要被移除的缓存工具的名称 */ public static void removeCacheUtils(String cacheName) { HASH_MAP.remove(cacheName); } /** * 添加缓存 * * @param key 缓存的标识 * @param value 缓存的值 */ public void put(String key, Object value) { super.put(key, new KeyValue<>(System.currentTimeMillis() + time, value)); } /** * 获取缓存 * * @param key 缓存的标识 * @return 标识对应的缓存的数据 如果没有被缓存或已过期则返回 null */ public Object get(String key) { KeyValue keyValue = super.get(key); if (keyValue == null) { return null; } if (keyValue.getKey() < System.currentTimeMillis()) { super.remove(key); return null; } return keyValue.getValue(); } /** * 获取缓存工具名称 * * @return 缓存工具名称 */ public String getCacheName() { return cacheName; } /** * 获取缓存过期时间 * * @return 缓存过期时间 */ public long getTime() { return time; } /** * 创建一个缓存定时清理任务的 task 对象 可以直接拿去进行缓存清理 * * @return task 对象 */ public ClearTask createCacheClearTask() { return new ClearTask(this); } public static class ClearTask extends TimerTask { private final CacheUtils cacheUtils; public ClearTask(CacheUtils cacheUtils) { this.cacheUtils = cacheUtils; } @Override public void run() { this.cacheUtils.forEach((k, v) -> { if (v.getKey() < System.currentTimeMillis()) { this.cacheUtils.remove(k); } }); } } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy