Spring Cache - Как я могу получить список всех реальных объектов данных после изменения других методов кэширования с помощью пользовательского ключа? - PullRequest
0 голосов
/ 06 мая 2019

У меня есть грубые методы, которые изменяют данные в кеше и базе данных У меня также есть метод, который возвращает все сущности, когда я использую его после изменений в кэше и базе данных, я получаю неактуальные данные. Насколько я понимаю, дело в методе возврата всех сущностей. Он использует ключ по умолчанию, он отличается от других методов. Что мне нужно сделать, чтобы я мог вернуть действительный паспорт?

@Service
@CacheConfig(cacheNames = "configuration")
class ServiceConfiguration{

 @Cacheable //this method returns non actual data
    public List<MySomeConfiguration> getAllProxyConfigurations() {
        return repository.getAllConfigurations();
}

   @Cacheable(key = "#root.target.getConfigurationById(#id).serverId")
    public MySomeConfiguration getConfigurationById(Long id) {
...
   return configuration;
}

 @CachePut(key = "#configuration.serverId", condition = "#result.id != null")
    public MySomeConfiguration addOrUpdateConfiguration(Configuration configuration) {
   return configuration;
}

   @Cacheable(key = "#serverId")
    public MySomeConfiguration getConfigurationByServerId(String serverId) {...
   return configuration;
}

   @CacheEvict(key = "#root.target.getConfigurationById(#id).serverId")
    public void deleteConfigurationById(Long id) {
...
}
}//end class

p.s. извините за мой английский

1 Ответ

0 голосов
/ 06 мая 2019

По умолчанию менеджер кэша Redis использует StringRedisSerializer для сериализатора ключей

Ваш класс toString () используется для сериализации ключа объекта, так что не давайте разные ключи для разных методов, таких как put, get, evict и т. Д. Вы должны полагаться на ваш toString (), чтобы получить ключ или переопределить с помощью Spring Кэш Custom KeyGenerator

См.

https://www.baeldung.com/spring-cache-custom-keygenerator

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...