Guavaローカルキャッシュキャッシュ使用量-有効期限付きのマップ

グアバパッケージをご紹介します 

        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>29.0-jre</version>
        </dependency>

 

パッケージツールバー 

import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;

import java.util.concurrent.TimeUnit;

/**
 * 带有效期的本地缓存工具
 *
 * @author 向振华
 * @date 2021/02/26 10:33
 */
public class CacheUtils {

    /**
     * 初始化缓存
     */
    private static final LoadingCache<Object, Object> CACHE = CacheBuilder.newBuilder()
            // 缓存池大小,在缓存项接近该大小时, Guava开始回收旧的缓存项
            .maximumSize(16)
            // 设置缓存在写入之后在设定时间后失效
            .expireAfterWrite(3, TimeUnit.SECONDS)
            .build(new CacheLoader<Object, Object>() {
                @Override
                public Object load(Object key) {
                    // 处理缓存键不存在缓存值时的处理逻辑
                    return null;
                }
            });

    /**
     * 存入缓存
     *
     * @param key
     * @param value
     */
    public static void put(Object key, Object value) {
        CACHE.put(key, value);
    }

    /**
     * 获取缓存
     *
     * @param key
     */
    public static Object get(Object key) {
        try {
            return CACHE.get(key);
        } catch (Exception e) {
            return null;
        }
    }

    /**
     * 是否存在key
     *
     * @param key
     * @return 是否存在key
     */
    public static boolean isExist(Object key) {
        boolean isExist;
        try {
            isExist = CACHE.get(key) != null;
        } catch (Exception e) {
            isExist = false;
        }
        return isExist;
    }
}

テスト

    public static void main(String[] args) throws Exception {
        System.out.println(CacheUtils.get("x"));
        CacheUtils.put("x", "aaa");
        CacheUtils.put("x", "bbb");
        System.out.println(CacheUtils.get("x"));
        Thread.sleep(5000L);

        System.out.println("-------");
        System.out.println(CacheUtils.get("x"));
        CacheUtils.put("x", "aaa");
        System.out.println(CacheUtils.get("x"));
    }

 結果:

null
bbb
-------
null
aaa

おすすめ

転載: blog.csdn.net/Anenan/article/details/114135689