首页 文章

使用Spring Data Redis 2.0.3的缓存管理器

提问于
浏览
1

目前,我正在使用带有Ehcache的@Cachable来使用spring缓存 . 我将使用Spring Data Redis 2.0.3替换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(min 2.0.3)设置 cacheManager 以使用 @Cachable ,我将不胜感激 .

1 回答

  • 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 中看到更多方法 .

相关问题