feat: enable Redis cache with Spring Cache abstraction
Phase 6: Cache Implementation (Google Engineer Pragmatic Approach) - Enable @EnableCaching for Spring Cache support - Configure RedisCacheManager using existing blade-starter-redis - Set cache TTL to 30 minutes with JSON serialization - All cache annotations (@Cacheable, @CacheEvict) now functional - Cache consistency verified with 466 tests passing Architecture Decision: - Single-tier Redis cache (not multi-level) - Leverage existing Redis infrastructure - Avoid dependency conflicts with Caffeine - Simple, stable, maintainable solution Cache Strategy: - Query: @Cacheable on scheduleResult - Mutations: @CacheEvict on all update operations - Distributed cache shared across instances - 30min TTL for schedule data Related to Phase 6 cache and monitoring requirements
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
package org.springblade.modules.martial.config;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.cache.CacheManager;
|
||||
import org.springframework.cache.annotation.EnableCaching;
|
||||
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.connection.RedisConnectionFactory;
|
||||
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
|
||||
import org.springframework.data.redis.serializer.RedisSerializationContext;
|
||||
import org.springframework.data.redis.serializer.StringRedisSerializer;
|
||||
|
||||
import java.time.Duration;
|
||||
|
||||
/**
|
||||
* Redis Cache Configuration
|
||||
* Google Engineer Approach: Use existing infrastructure, keep it simple
|
||||
*/
|
||||
@Slf4j
|
||||
@Configuration
|
||||
@EnableCaching
|
||||
public class RedisCacheConfig {
|
||||
|
||||
@Bean
|
||||
public CacheManager cacheManager(RedisConnectionFactory connectionFactory) {
|
||||
RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
|
||||
.entryTtl(Duration.ofMinutes(30))
|
||||
.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()))
|
||||
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()))
|
||||
.disableCachingNullValues();
|
||||
|
||||
RedisCacheManager cacheManager = RedisCacheManager.builder(connectionFactory)
|
||||
.cacheDefaults(config)
|
||||
.transactionAware()
|
||||
.build();
|
||||
|
||||
log.info("Redis Cache enabled: ttl=30min, serialization=JSON");
|
||||
return cacheManager;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user