Диспетчер кэша с Spring Data Redis 2.0.3

В настоящее время я использую Spring cache, используя @Cachable с Ehcache. Я собираюсь заменить Ehcache на Redis с помощью Spring Data Redis 2.0.3. Все примеры, которые я вижу в Интернете, основаны на старых версиях, но новая версия имеет другой формат конструкторов.

Это мой текущий confManager conf:

<bean id="ehcache" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
    <property name="configLocation" value="classpath:ehcache.xml"/>
    <property name="shared" value="true"/>
</bean>

Пример использования Redis на основе более старой версии:

<bean id="cacheManager" class="org.springframework.data.redis.cache.RedisCacheManager"
        c:template-ref="redisTemplate" />

Конструктор в новой версии полностью отличается от старых версий, и все примеры новой версии помещают все в кеш вручную следующим образом:

redisTemplate.opsForHash().put(user.getObjectKey(), user.getKey(), user);

Я все еще хочу использовать cacheManager и @cachable но понятия не имею, как настроить cacheManager бин с новой версией Spring Data Redis. Для конструктора новых версий требуется RedisCacheWriter:

 public RedisCacheManager(RedisCacheWriter cacheWriter, RedisCacheConfiguration defaultCacheConfiguration) 

Я ценю, если вы можете поделиться своей идеей о том, как настроить cacheManager использовать @Cachable с новой версией Spring Data Redis(мин. 2.0.3).

1 ответ

В Spring Data Redis 2.0+ вы могли бы написать так:

/**
 * Redis config.
 *
 * @author chenxinyu
 */
@Configuration
@EnableCaching
public class RedisConfig {

    @Value("${spring.redis.host}")
    private String redisHost;

    @Value("${spring.redis.port}")
    private Integer redisPort;

    @Bean
    public JedisConnectionFactory jedisConnectionFactory() {
        RedisStandaloneConfiguration configuration =
                new RedisStandaloneConfiguration(redisHost, redisPort);
        return new JedisConnectionFactory(configuration);
    }

    @Bean(name = "redisTemplate")
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory factory) {
        RedisSerializer genericJackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
        RedisSerializer stringRedisSerializer = new StringRedisSerializer();

        RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();

        redisTemplate.setKeySerializer(stringRedisSerializer);
        redisTemplate.setHashKeySerializer(stringRedisSerializer);
        redisTemplate.setValueSerializer(genericJackson2JsonRedisSerializer);
        redisTemplate.setHashValueSerializer(genericJackson2JsonRedisSerializer);
        redisTemplate.setConnectionFactory(factory);

        return redisTemplate;
    }

    @Bean
    public CacheManager initRedisCacheManager(RedisConnectionFactory factory) {
        RedisCacheManager.RedisCacheManagerBuilder builder = RedisCacheManager
                .RedisCacheManagerBuilder.fromConnectionFactory(factory);
        return builder.build();
    }

}

это только один пример, вы можете увидеть больше методов в RedisCacheManager.java,

Другие вопросы по тегам