자바 로 컬 캐 시 도구 클래스

3365 단어 Java
맵 을 사용 하여 간단 한 로 컬 캐 시 클래스 를 작 성 했 습 니 다. 데이터 추가, 획득 및 데이터 유효기간 만 실 현 했 습 니 다. 관심 이 있 으 면 다른 기능 을 자체 적 으로 확장 할 수 있 습 니 다.부족 하 시 면 지적 해 주세요. 감사합니다!
package cache;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

/**
 * 本地cache(程序变量)用于少数对数据实时性要求不高的场景,一般与memcache或redis配合使用 
* 分布式环境下请慎用 * @author choimeyu * @date 2018/04/16 */ public class LocalCacheClient { // 缓存map private static Map cacheMap = new HashMap(); // 缓存有效期map private static Map expireTimeMap = new HashMap(); /** * 获取指定的value,如果key不存在或者已过期,则返回null * @param key * @return */ public static Object get(String key) { if (!cacheMap.containsKey(key)) { return null; } if (expireTimeMap.containsKey(key)) { if (expireTimeMap.get(key) < System.currentTimeMillis()) { // 缓存失效,已过期 return null; } } return cacheMap.get(key); } /** * @param key * @param * @return */ public static T getT(String key) { Object obj = get(key); return obj == null ? null : (T) obj; } /** * 设置value(不过期) * @param key * @param value */ public static void set(String key, Object value) { cacheMap.put(key, value); } /** * 设置value * @param key * @param value * @param millSeconds 过期时间(毫秒) */ public static void set(final String key, Object value, int millSeconds) { final long expireTime = System.currentTimeMillis() + millSeconds; cacheMap.put(key, value); expireTimeMap.put(key, expireTime); if (cacheMap.size() > 2) { // 清除过期数据 new Thread(new Runnable() { public void run() { // 此处若使用foreach进行循环遍历,删除过期数据,会抛出java.util.ConcurrentModificationException异常 Iterator> iterator = cacheMap.entrySet().iterator(); while (iterator.hasNext()) { Map.Entry entry = iterator.next(); if (expireTimeMap.containsKey(entry.getKey())) { long expireTime = expireTimeMap.get(key); if (System.currentTimeMillis() > expireTime) { iterator.remove(); expireTimeMap.remove(entry.getKey()); } } } } }).start(); } } /** * key是否存在 * @param key * @return */ public static boolean isExist(String key) { return cacheMap.containsKey(key); } public static void main(String[] args) { LocalCacheClient.set("testKey_1", "testValue_1"); LocalCacheClient.set("testKey_2", "testValue_2", 1); LocalCacheClient.set("testKey_3", "testValue_3"); LocalCacheClient.set("testKey_4", "testValue_4", 1); Object testKey_2 = LocalCacheClient.get("testKey_2"); System.out.println(testKey_2); } }

좋은 웹페이지 즐겨찾기