1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
| package com.example.config;
import lombok.Getter; import lombok.Setter; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.cache.CacheManager; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; 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.core.RedisTemplate; import org.springframework.data.redis.serializer.RedisSerializationContext;
import java.time.Duration; import java.util.HashMap; import java.util.Map;
@Configuration @AutoConfigureAfter(value = RedisConfig.class)
@ConfigurationProperties(prefix = "caching") public class RedisCachingConfig {
@Getter @Setter private Map<String, Long> ttlmap;
@Bean public CacheManager cacheManager(RedisTemplate<String, Object> redisTemplate) { return RedisCacheManager .builder(RedisCacheWriter.nonLockingRedisCacheWriter(redisTemplate.getConnectionFactory())) .cacheDefaults(redisCacheConfiguration(redisTemplate, 3600L)) .withInitialCacheConfigurations(initialRedisCacheConfiguration(redisTemplate)) .build(); }
private RedisCacheConfiguration redisCacheConfiguration(RedisTemplate<String, Object> redisTemplate, Long ttl) {
return RedisCacheConfiguration.defaultCacheConfig() .entryTtl(Duration.ofSeconds(ttl)) .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisTemplate.getStringSerializer())) .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(redisTemplate.getValueSerializer())); }
private Map<String, RedisCacheConfiguration> initialRedisCacheConfiguration(RedisTemplate<String, Object> redisTemplate) { Map<String, RedisCacheConfiguration> redisCacheConfigurationMap = new HashMap<>(); for (Map.Entry<String, Long> entry : ttlmap.entrySet()) { redisCacheConfigurationMap.put(entry.getKey(), redisCacheConfiguration(redisTemplate, entry.getValue())); } return redisCacheConfigurationMap; }
}
|