带有Spring Data Redis 2.0.3的缓存管理器

时间:2018-06-20 13:45:11

标签: redis spring-data-redis

当前,我通过将@Cachable与Ehc​​ache结合使用来使用spring缓存。我将通过使用Spring Data Redis 2.0.3将Red Hat Ehcache替换为Redis。我在网上看到的所有示例均基于旧版本,但新版本具有不同的构造函数格式。

这是我当前的cacheManager 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,但不知道如何使用新版本的Spring Data Redis配置cacheManager bean。新版本的构造函数需要RedisCacheWriter:

 public RedisCacheManager(RedisCacheWriter cacheWriter, RedisCacheConfiguration defaultCacheConfiguration) 

非常感谢您能与新版本的Spring Data Redis(最低2.0.3版)一起分享如何设置cacheManager以使用@Cachable的想法。

1 个答案:

答案 0 :(得分:0)

在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中看到更多方法。