我是靠谱客的博主 负责手机,最近开发中收集的这篇文章主要介绍使用CaffeineCache来实现spring cache的缓存定时刷新,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、背景

最近在使用spring的@Cacheable注解时发现无法做到设置定时刷新时间,找了一些资料,采用CaffeineCache实现了一个demo。

二、具体代码实现

1、config配置

import com.github.benmanes.caffeine.cache.Caffeine;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cache.caffeine.CaffeineCache;
import org.springframework.cache.support.SimpleCacheManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.ArrayList;
import java.util.concurrent.TimeUnit;

@Configuration
@Slf4j
@EnableCaching
public class CaffeineCacheConfig {

    private static final int DEFAULT_MAXSIZE = 100;
    private static final int DEFAULT_TTL = 600;

    public enum HadesInsightCache {
        //这里相当于将缓存的key值注册进来
        test1(60, 100),
        test2(3600, 100),
        test3(300, 100),
        test4(300, 100);

        HadesInsightCache() {
        }

        HadesInsightCache(int ttl) {
            this.ttl = ttl;
        }

        HadesInsightCache(int ttl, int maxSize) {
            this.ttl = ttl;
            this.maxSize = maxSize;
        }

        /**
         * 最大数量
         */
        private int maxSize = DEFAULT_MAXSIZE;
        /**
         * 过期时间
         */
        private int ttl = DEFAULT_TTL;

        public int getMaxSize() {
            return maxSize;
        }

        public int getTtl() {
            return ttl;
        }
    }

    @Bean
    public CacheManager createCacheManager() {
        log.info("cache manager init...");
        SimpleCacheManager cacheManager = new SimpleCacheManager();
        ArrayList<CaffeineCache> caches = new ArrayList<>();
        for (HadesInsightCache c : HadesInsightCache.values()) {
            caches.add(new CaffeineCache(c.name(),
                    Caffeine.newBuilder()
                            .expireAfterWrite(c.getTtl(), TimeUnit.SECONDS)
                            .maximumSize(c.getMaxSize())
                            .build())
            );
        }
        cacheManager.setCaches(caches);
        return cacheManager;
    }
}

2、具体使用

@Cacheable(value = "test1", key = "#param", sync = true)
    public String getResult(String param) {
        return param;
    }

其中value值填写config中注册的值,key值即参数,若无参数可不填,sync为是否同步加载

三、补充

1、CaffeineCache为本地缓存,若作为集群公共缓存,可采用redis来做缓存。
2、考虑后续采用自定义注解,实现注解中直接添加过期时间。

最后

以上就是负责手机为你收集整理的使用CaffeineCache来实现spring cache的缓存定时刷新的全部内容,希望文章能够帮你解决使用CaffeineCache来实现spring cache的缓存定时刷新所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(32)

评论列表共有 0 条评论

立即
投稿
返回
顶部