package com.qianwen.core.redis.config; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import com.qianwen.core.jwt.config.JwtRedisConfiguration; import org.springframework.beans.factory.ObjectProvider; import org.springframework.boot.autoconfigure.AutoConfigureBefore; import org.springframework.boot.autoconfigure.cache.CacheManagerCustomizers; import org.springframework.boot.autoconfigure.cache.CacheProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; 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.cache.RedisCacheWriter; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.serializer.RedisSerializationContext; import org.springframework.data.redis.serializer.RedisSerializer; import org.springframework.lang.Nullable; @AutoConfigureBefore({JwtRedisConfiguration.class}) @EnableConfigurationProperties({CacheProperties.class}) @Configuration(proxyBeanMethods = false) /* loaded from: blade-starter-redis-9.3.0.0-SNAPSHOT.jar:org/springblade/core/redis/config/BladeRedisCacheAutoConfiguration.class */ public class BladeRedisCacheAutoConfiguration { private final RedisSerializer redisSerializer; private final CacheProperties cacheProperties; private final CacheManagerCustomizers customizerInvoker; @Nullable private final RedisCacheConfiguration redisCacheConfiguration; BladeRedisCacheAutoConfiguration(RedisSerializer redisSerializer, CacheProperties cacheProperties, CacheManagerCustomizers customizerInvoker, ObjectProvider redisCacheConfiguration) { this.redisSerializer = redisSerializer; this.cacheProperties = cacheProperties; this.customizerInvoker = customizerInvoker; this.redisCacheConfiguration = (RedisCacheConfiguration) redisCacheConfiguration.getIfAvailable(); } @Primary @Bean({"redisCacheManager"}) public RedisCacheManager redisCacheManager(RedisConnectionFactory connectionFactory) { RedisCacheWriter redisCacheWriter = RedisCacheWriter.nonLockingRedisCacheWriter(connectionFactory); RedisCacheConfiguration cacheConfiguration = determineConfiguration(); List cacheNames = this.cacheProperties.getCacheNames(); Map initialCaches = new LinkedHashMap<>(); if (!cacheNames.isEmpty()) { Map cacheConfigMap = new LinkedHashMap<>(cacheNames.size()); cacheNames.forEach(it -> { RedisCacheConfiguration redisCacheConfiguration = (RedisCacheConfiguration) cacheConfigMap.put(it, cacheConfiguration); }); initialCaches.putAll(cacheConfigMap); } RedisAutoCacheManager cacheManager = new RedisAutoCacheManager(redisCacheWriter, cacheConfiguration, initialCaches, true); cacheManager.setTransactionAware(false); return this.customizerInvoker.customize(cacheManager); } private RedisCacheConfiguration determineConfiguration() { if (this.redisCacheConfiguration != null) { return this.redisCacheConfiguration; } CacheProperties.Redis redisProperties = this.cacheProperties.getRedis(); RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig().serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(this.redisSerializer)); if (redisProperties.getTimeToLive() != null) { config = config.entryTtl(redisProperties.getTimeToLive()); } if (redisProperties.getKeyPrefix() != null) { config = config.prefixKeysWith(redisProperties.getKeyPrefix()); } if (!redisProperties.isCacheNullValues()) { config = config.disableCachingNullValues(); } if (!redisProperties.isUseKeyPrefix()) { config = config.disableKeyPrefix(); } return config; } }