Spring Data Redis - запись в хранилище ключей напрямую? - PullRequest
0 голосов
/ 11 марта 2020

Мой 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;
}
...