目前,我通过将@Cachable 与Ehcache 一起使用来使用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)
如果您能分享您关于如何设置 cacheManager
以将 @Cachable
与新版本的 Spring Data Redis(最低 2.0.3)一起使用的想法,我将不胜感激。
最佳答案
在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
中查看更多方法。
关于redis - 带有 Spring Data Redis 2.0.3 的缓存管理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50949773/