Диспетчер кэша с 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
,