Мой Spring Project настраивает RedisCacheManager с JedisConnectionFactory для взаимодействия с Redis. Мы определяем некоторые POJO с аннотацией @RedisHash
для сохранения и загрузки их.
Я хочу записывать / читать в экземпляр redis напрямую без промежуточного использования POJO для определения контракта. На данный момент это просто запись записей со строкой для ключа и значения. Я могу настроить RedisTemplate и использовать, например, redisTemplate.opsForValue().get("myValue")
, чтобы получить значения из хранилища данных. Однако я не уверен, смогу ли я настроить этот шаблон для использования той же конфигурации, что и мой RedisCacheManager, чтобы использовать тот же префикс и добавить срок действия TTL.
Я заметил, что у менеджера кэша есть метод :
rcm.getCache("cachename").put("myValue", "Hello world");
Однако мне не ясно, почему должен быть cacheName, и вызовы этого не добавляют ничего в мой кэш.
@Bean
public RedisConnectionFactory redisConnectionFactory() {
return new LettuceConnectionFactory(new RedisStandaloneConfiguration());
}
@Bean
public RedisCacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
return RedisCacheManager
.builder(redisConnectionFactory)
.cacheDefaults(createCacheConfiguration())
.build();
}
private RedisCacheConfiguration createCacheConfiguration() {
return RedisCacheConfiguration.defaultCacheConfig()
.serializeKeysWith(
RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()))
.serializeValuesWith(
RedisSerializationContext.SerializationPair
.fromSerializer(new GenericJackson2JsonRedisSerializer()))
.prefixKeysWith("HOLLABILLZ")
.entryTtl(Duration.ofSeconds(4l));
}
@Bean
public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory rcf) {
RedisTemplate<String, String> rs = new RedisTemplate<>();
rs.setKeySerializer(new StringRedisSerializer());
rs.setValueSerializer(new StringRedisSerializer());
rs.setConnectionFactory(rcf);
return rs;
}