目前我正在使用注释@CacheEvict使用cron作业,之后再次使用新的调用重新加载,但不满意这种方法,因为我有多个节点。
我的要求是
- 在一定的时间限制后用新数据重新加载缓存。
- 应该工作在多个节点
寻找一个优雅的设计。
您是否尝试使用缓存管理器?
https://www.baeldung.com/spring-multiple-cache-managers
- Spring @CacheEvict注释用于退出缓存。
- @CacheEvict是在方法级使用的。
- @Cacheable注释在缓存中设置值,相反,@CacheEvict删除缓存。
- 在一个方法中,我们可以使用@Cacheable来缓存结果,在另一个方法中,我们可以使用@CacheEvict来退出缓存。 @CacheEvict注释是在Spring 3.1中引入的。
@CacheEvict有以下属性:
- String [] cacheNames要退出的缓存名称
- String[]的值cachename的别名。
- 字符串键动态计算密钥的拼写表达式。
- keyGenerator字符串要使用的自定义KeyGenerator的bean名称。
- 字符串缓存管理器自定义CacheManager的bean名称。如果没有设置,则用于创建默认的缓存解析器。
- cacheResolver字符串要使用的自定义缓存解析器的bean名称。
- 字符串条件用于使缓存退出操作有条件的拼写表达式。 布尔allEntries
- 如果为true,则删除缓存中的所有条目。 布尔beforeInvocation
如果为true,则在调用该方法之前执行缓存清除操作。
我认为您承担的风险是永远不会对在应用程序代码中精心设计的解决方案感到满意,从而解决应用程序部署的体系结构设计问题。如果你需要控制一组可变节点的行为,你最好设计一个小的独立工具(例如以微服务的形式)来接收"元"。请求并做正确的事情:按正确的顺序调用所有节点的@CacheEvict和@Cache入口点。节点列表和要调用的入口点列表可以很容易地在参数文件或数据源中定义。你也可以让你的pod听事件流或AMQP广播。