Java ConcurrentHashMap 实现过期时间设置 | 替代 Redis 缓存
可以使用 ConcurrentHashMap<String, Object> 来实现类似于 Redis 的过期时间设置。以下是一个简单的示例:\n\njava\nimport java.util.Map;\nimport java.util.concurrent.ConcurrentHashMap;\nimport java.util.concurrent.Executors;\nimport java.util.concurrent.ScheduledExecutorService;\nimport java.util.concurrent.TimeUnit;\n\npublic class ExpiringMap<T> {\n private final Map<String, ExpiringObject<T>> map = new ConcurrentHashMap<>();\n private final ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();\n\n public void put(String key, T value, long timeout, TimeUnit unit) {\n long expirationTime = System.currentTimeMillis() + unit.toMillis(timeout);\n ExpiringObject<T> expiringObject = new ExpiringObject<>(value, expirationTime);\n map.put(key, expiringObject);\n\n scheduler.schedule(() -> {\n if (map.containsKey(key)) {\n map.remove(key);\n }\n }, timeout, unit);\n }\n\n public T get(String key) {\n ExpiringObject<T> expiringObject = map.get(key);\n if (expiringObject != null && expiringObject.isExpired()) {\n map.remove(key);\n return null;\n }\n return expiringObject != null ? expiringObject.getValue() : null;\n }\n\n private static class ExpiringObject<T> {\n private final T value;\n private final long expirationTime;\n\n public ExpiringObject(T value, long expirationTime) {\n this.value = value;\n this.expirationTime = expirationTime;\n }\n\n public T getValue() {\n return value;\n }\n\n public boolean isExpired() {\n return System.currentTimeMillis() > expirationTime;\n }\n }\n}\n\n\n使用该类可以设置键值对的过期时间,示例代码如下:\n\njava\nExpiringMap<String> expiringMap = new ExpiringMap<>();\nexpiringMap.put("key1", "value1", 10, TimeUnit.SECONDS); // 设置键值对的过期时间为10秒\n\nString value1 = expiringMap.get("key1"); // 获取键值对的值,如果过期则返回null\nSystem.out.println(value1); // 输出:value1\n\nThread.sleep(11000); // 等待11秒,使键值对过期\n\nString value2 = expiringMap.get("key1");\nSystem.out.println(value2); // 输出:null\n\n\n这样就可以通过 ConcurrentHashMap 来实现类似于 Redis 的过期时间设置了。需要注意的是,该实现是基于单机的,如果需要分布式环境下的过期时间设置,可以考虑使用 Redis 等分布式缓存。
原文地址: https://www.cveoy.top/t/topic/pwFb 著作权归作者所有。请勿转载和采集!