springboot 定义多个缓存管理器

java 复制代码
package com.kongjs.note.admin.config;

import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import org.cache2k.extra.spring.SpringCache2kCacheManager;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cache.support.CompositeCacheManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializationContext;

import java.time.Duration;
import java.util.ArrayList;
import java.util.List;

@EnableCaching
@Configuration
public class CacheConfig {

    @Primary
    @Bean("localCacheManager")
    public CacheManager localCacheManager() {
        SpringCache2kCacheManager cacheManager = new SpringCache2kCacheManager();
        cacheManager.defaultSetup(cache2kBuilder -> cache2kBuilder.expireAfterWrite(Duration.ofDays(1L)));
        cacheManager.setDefaultCacheNames("user","accessToken","refreshToken");
        cacheManager.setAllowUnknownCache(false);
        return cacheManager;
    }

    @Bean("remoteCacheManager")
    public CacheManager remoteCacheManager(RedisConnectionFactory connectionFactory) {
        GenericJackson2JsonRedisSerializer jsonRedisSerializer = GenericJackson2JsonRedisSerializer.builder().build();
        jsonRedisSerializer.configure(objectMapper -> objectMapper.registerModule(new JavaTimeModule()));
        RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig();
        config = config.serializeKeysWith(RedisSerializationContext.string().getKeySerializationPair());
        config = config.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jsonRedisSerializer));
        config = config.entryTtl(Duration.ofDays(1L)).enableTimeToIdle();
        config = config.computePrefixWith(cacheName -> "cache:"+cacheName + ":");
        config = config.disableCachingNullValues();
        return RedisCacheManager.builder(connectionFactory).transactionAware().cacheDefaults(config).build();
    }

    @Bean("levelCacheManager")
    public CacheManager levelCacheManager(@Qualifier("localCacheManager") CacheManager localCacheManager, @Qualifier("remoteCacheManager") CacheManager remoteCacheManager) {
        List<CacheManager> cacheManagers = new ArrayList<>();
        cacheManagers.add(localCacheManager);
        cacheManagers.add(remoteCacheManager);
        CompositeCacheManager compositeCacheManager = new CompositeCacheManager();
        compositeCacheManager.setCacheManagers(cacheManagers);
        compositeCacheManager.setFallbackToNoOpCache(true);
        return compositeCacheManager;
    }
}
相关推荐
Terio_my14 分钟前
J2Cache 多级缓存配置与使用
缓存
拾忆,想起19 分钟前
AMQP协议深度解析:消息队列背后的通信魔法
java·开发语言·spring boot·后端·spring cloud
PH = 736 分钟前
Spring Ai Alibaba开发指南
java·后端·spring
不会吃萝卜的兔子1 小时前
springboot websocket 原理
spring boot·后端·websocket
野熊佩骑1 小时前
一文读懂Redis之数据持久化
linux·运维·数据库·redis·缓存·中间件·centos
gsfl1 小时前
redis特性和应用场景
数据库·redis·缓存
Fency咖啡2 小时前
Spring Boot 内置日志框架 Logback - 以及 lombok 介绍
spring boot·后端·logback
西岭千秋雪_3 小时前
RAG核心特性:ETL
数据仓库·人工智能·spring boot·ai编程·etl
karry_k3 小时前
什么是Fork/Join?
java·后端
卷Java3 小时前
小程序前端功能更新说明
java·前端·spring boot·微信小程序·小程序·uni-app