Şu satırı dahil ederiz
import org.springframework.data.redis.cache.RedisCacheConfiguration;
disableCachingNullValues metodu
Örnek
Şöyle yaparız
@Bean
public RedisCacheConfiguration cacheConfiguration() {
return RedisCacheConfiguration.defaultCacheConfig()
.entryTtl(Duration.ofMinutes(60))
.disableCachingNullValues()
.serializeValuesWith(RedisSerializationContext.SerializationPair
.fromSerializer(new GenericJackson2JsonRedisSerializer()));
}
}entryTtl metodu
Örnek
Açıklaması şöyle
By setting the expiration time of different keys in the configuration file, the effect of customizing the key expiration time can be achieved.
Şöyle yaparız
@Autowired
private MyProperties properties;
@Bean
public CacheManager cacheManager(RedisConnectionFactory connectionFactory) {
RedisCacheConfiguration defaultCacheConfig = RedisCacheConfiguration
.defaultCacheConfig()
.entryTtl(Duration.ofMinutes(10)).disableCachingNullValues();
RedisCacheWriter redisCacheWriter = RedisCacheWriter
.nonLockingRedisCacheWriter(connectionFactory);
ImmutableSet.Builder<String> cacheNames = ImmutableSet.builder();
ImmutableMap.Builder<String, RedisCacheConfiguration> cacheConfig =
ImmutableMap.builder();
for (Map.Entry<String, Duration> entry : properties.getInitCaches().entrySet()) {
cacheNames.add(entry.getKey());
cacheConfig.put(entry.getKey(), defaultCacheConfig.entryTtl(entry.getValue()));
}
return RedisCacheManager.builder(redisCacheWriter)
.cacheDefaults(defaultCacheConfig)
.initialCacheNames(cacheNames.build())
.withInitialCacheConfigurations(cacheConfig.build())
.build();
}Properties dosyası şöyledir
initCaches: fooboo: 10m fooboo1: 1h
Properties sınıfı şöyledir
@ConfigurationProperties
public class MyProperties {
private final Map<String, Duration> initCaches = Maps.newHashMap();
public Map<String, Duration> getInitCaches() {
return initCaches;
}
}serializeKeysWith ve serializeValuesWith metodları
Örnek - JSON
Şöyle yaparız. Burada ObjetMapper parametresi ile Spring'e ait olan bean kullanılıyor. Yeni bir tane yaratmaya gerek yok
@Configuration
@EnableCaching
class CachingConfig{
@Bean
fun cacheConfiguration(mapper: ObjectMapper): RedisCacheConfiguration {
return RedisCacheConfiguration.defaultCacheConfig()
.entryTtl(Duration.ofMinutes(5))
.disableCachingNullValues()
.serializeValuesWith(
SerializationPair.fromSerializer(GenericJackson2JsonRedisSerializer(mapper))
)
}
}Eğer Spring'e ait olan bean'ini kopyasın alıp yeni module takmak istersek şöyle yaparız
@Bean
fun cacheConfiguration(mapper: ObjectMapper): RedisCacheConfiguration {
val myMapper = mapper.copy()
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
.registerModule(
Hibernate6Module()
.enable(Hibernate6Module.Feature.FORCE_LAZY_LOADING)
.enable(Hibernate6Module.Feature.REPLACE_PERSISTENT_COLLECTIONS)
)
.activateDefaultTyping(
jacksonObjectMapper().polymorphicTypeValidator,
ObjectMapper.DefaultTyping.EVERYTHING,
JsonTypeInfo.As.PROPERTY
)
return RedisCacheConfiguration.defaultCacheConfig()
.entryTtl(Duration.ofMinutes(5))
.disableCachingNullValues()
.serializeValuesWith(
SerializationPair.fromSerializer(GenericJackson2JsonRedisSerializer(myMapper))
)
}Örnek - RedisSerialization
Şöyle yaparız
@EnableCaching@Configurationpublic class RedisConfig {private final RedisSerializer<String> stringSerializer = RedisSerializer.string();private final RedisSerializer<Object> objectRedisSerializer = RedisSerializer.json();private final Duration ttl = Duration.ofHours(6);@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory
redisConnectionFactory) {RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();redisTemplate.setConnectionFactory(redisConnectionFactory);return redisTemplate;}@Beanpublic RedisCacheConfiguration redisCacheConfiguration() {return RedisCacheConfiguration.defaultCacheConfig().serializeKeysWith(RedisSerializationContext.SerializationPair
.fromSerializer(stringSerializer)).serializeValuesWith(RedisSerializationContext.SerializationPair
.fromSerializer(objectRedisSerializer)).entryTtl(ttl);}}
Hiç yorum yok:
Yorum Gönder