Spring缓存-使用自定义键更改其他缓存方法后,如何获取所有实际数据实体的列表?

时间:2019-05-06 12:34:08

标签: java spring caching

我有Crud方法可以修改缓存和数据库中的数据 当缓存和数据库发生更改后,我得到不相关的数据时,我还有一个方法可以返回所有实体。 据我了解,重点在于返回所有实体的方法。它使用默认密钥,它不同于其他方法。 我需要怎么做才能返回实际的数据表?

@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 :(得分:0)

默认情况下,redis缓存管理器将StringRedisSerializer用于密钥序列化器

您的类toString()用于序列化对象的键,因此请不要为put,get,evicet等不同方法提供不同的键,但是依赖于您的toString()来获取键或使用Spring重写缓存自定义KeyGenerator

引用

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