JedisConnectionFactory jedisConnectionFactory() {
RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration("localhost", 6379);
return new JedisConnectionFactory(redisStandaloneConfiguration);
}
вариант 1: использование RedisCacheWriter
public RedisCacheManager getRedisCacheManager(RedisConnectionFactory connectionFactory) {
RedisCacheWriter cacheWriter = RedisCacheWriter.lockingRedisCacheWriter(connectionFactory);
ClassLoader loader = this.getClass().getClassLoader();
JdkSerializationRedisSerializer jdkSerializer = new JdkSerializationRedisSerializer(loader);
SerializationPair<Object> pair = SerializationPair.fromSerializer(jdkSerializer);
RedisCacheConfiguration cacheConfig = RedisCacheConfiguration.defaultCacheConfig().serializeValuesWith(pair);
cacheConfig = cacheConfig.entryTtl(Duration.ofSeconds(3600));
Map<String, RedisCacheConfiguration> initialCacheConfigurations = new HashMap<>();
initialCacheConfigurations.put("order",cacheConfig.entryTtl(Duration.ofSeconds(1600)));
RedisCacheManager cacheManager = new RedisCacheManager(cacheWriter, cacheConfig,initialCacheConfigurations);
return cacheManager;
}
@Bean
public CacheManager cacheManager() {
RedisCacheManager cacheManager=getRedisCacheManager(jedisConnectionFactory());
log.info("CacheManager created ");
return cacheManager;
}
вариант 2: RedisTemplate
@Bean
RedisTemplate<Object, Object> redisTemplate() {
RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<Object, Object>();
redisTemplate.setConnectionFactory(jedisConnectionFactory());
redisTemplate.setKeySerializer(new StringRedisSerializer());
return redisTemplate;
}
@Bean
CacheManager cacheManager() {
//JedisConnectionFactory cacheManager=jedisConnectionFactory();
RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate());
cacheManager.setDefaultExpiration(60);
cacheManager.setUsePrefix(true);
return cacheManager;
}
В чем разница между RedisCacheManager
и RedisTemplate
? Между обоими классами существует значительная разница в потреблении памяти. Это что-то относительно их внутренней реализации хранения в кеше?
Springboot 2.x имеет RedisCacheWriter
, но в Springboot 1.4.3 мы должны использовать RedisTemplate
.