基于caffeine本地缓存的实现

发布时间 2023-06-30 15:12:16作者: 牛奶配苦瓜

1.本地缓存实现

1.1导入依赖
		<!--     caffeine 缓存   -->
        <dependency>
            <groupId>com.github.ben-manes.caffeine</groupId>
            <artifactId>caffeine</artifactId>
        </dependency>
1.2 创建缓存spring的bean容器
package org.jeecg.modules.test;


import com.github.benmanes.caffeine.cache.Cache;
import com.github.benmanes.caffeine.cache.Caffeine;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.stereotype.Component;

import java.util.concurrent.TimeUnit;


/**
 * 本地缓存
 */
//@Component
public class TestLocalCacheManager implements InitializingBean {


    private Cache<String,String> localCache;

    /**
     * 向缓存中保存数据,如果已经存在则不覆盖
     */
    public void putIfNotExist(String key, String value){
        if(localCache.getIfPresent(key)==null){
            localCache.put(key,value);
        }
    }

    /**
     * 根据key获取缓存数据
     *
     */
    public String get(String key){
        return localCache.getIfPresent(key);
    }


    public void del(String key){
        localCache.invalidate(key);
    }


    /**
     * 在bean初始化时,初始化本地缓存
     *
     */
    @Override
    public void afterPropertiesSet() throws Exception {
        localCache = Caffeine.newBuilder()
                .expireAfterWrite(10, TimeUnit.SECONDS)//写入后过期时间
                .expireAfterAccess(10, TimeUnit.SECONDS)//访问过后失效时间
                .maximumSize(1000)//初始缓存大小
                .build();
    }
}
1.3 具体使用

在对应类中注入@Autowired该TestLocalCacheManager类直接和map的使用方法没有什么差异