Я использую аннотации абстракции кэширования Spring, чтобы применить кеширование к моим методам обслуживания.
Поскольку я использую Redis в качестве хранилища кеша, я хочу использовать опцию истечения срока действия кеша в определенное время, поскольку это поддерживается Redis. Команда expireat в redis может использоваться для установки времени истечения срока действия в будущем.
Я не уверен, как я могу сделать это для ключей, которые являются частью моего кеша при использовании RedisCache.
Я попытался настроить RedisCacheManager, создав его bean-компонент.
Я вижу, что есть метод getNativeCache (). но я не нашел способа установить значение для истечения срока его использования.
Если есть способ настроить RedisCacheManager так, чтобы все ключи определенного кеша использовали то же время, что и срок действия, сообщите мне.

На самом деле есть. Пожалуйста, проверьте ниже:
RedisCacheConfiguration configuration = RedisCacheConfiguration.defaultCacheConfig()
.disableCachingNullValues()
.entryTtl(<your duration>)
.computePrefixWith(CacheKeyPrefix.simple())
.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()))
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()));
RedisCacheManager.RedisCacheManagerBuilder.fromConnectionFactory(redisConnectionFactory)
.cacheDefaults(configuration)
.build();
Я использую версию Spring Boot 2.0.4.RELEASE. А если вы используете более старые версии, вот как это сделать:
RedisCacheManager cacheManager =
new RedisCacheManager(
redisTemplate,//redis template
Arrays.asList("my-cahce"),//loads these caches at startup
false);//Do not allow null values
cacheManager.setLoadRemoteCachesOnStartup(true);
cacheManager.setCachePrefix(new DefaultRedisCachePrefix());
cacheManager.setDefaultExpiration(TimeUnit.SECONDS.convert(365, TimeUnit.DAYS));
Спасибо за ответ. Но я спросил не об этом. Я хочу, чтобы срок действия кеша истекал в абсолютное время, а не после истечения / завершения секунд. Я хочу использовать средство истечения срока действия Redis через Spring Cache Manager.
извините, не понял вопрос должным образом
@Bean (name = "cacheManager")
public RedisCacheManager cacheManager(RedisConnectionFactory connectionFactory) {
RedisCacheConfiguration conf_ready_info = RedisCacheConfiguration.defaultCacheConfig()
.entryTtl(Duration.ofMillis(50000));
RedisCacheConfiguration conf_base_info = RedisCacheConfiguration.defaultCacheConfig()
.entryTtl(Duration.ofMillis(60000));
Map<String, RedisCacheConfiguration> cacheConfigurations = new HashMap<String, RedisCacheConfiguration>();
cacheConfigurations.put("base_info", conf_base_info);
cacheConfigurations.put("ready_info", conf_ready_info);
return RedisCacheManager.RedisCacheManagerBuilder.fromConnectionFactory(connectionFactory)
.withInitialCacheConfigurations(cacheConfigurations).build();
}
@Cacheable(value = "ready_info", key = "#aid")
public String findByAid(String aid) throws Exception {
String readyInfo = "";
return readyInfo;
}
сэкономь мое время! спасибо! Я добавляю одно описание офиса: Кеши, требующие конфигурации RedisCacheConfiguration, отличной от конфигурации по умолчанию, можно указать через RedisCacheManager.RedisCacheManagerBuilder.withInitialCacheC onfigurations (Map).
Как это решить, истекая в определенное время, а не по продолжительности?