目前正在使用ClientDAO.getClients()
从数据库中获取客户端列表,并使用guava
进行缓存,刷新时间如下所示,时间为30分钟
private List<String> getClients() {
final Supplier<List<String>> supplier = () -> ClientDAO.getClients();
Suppliers.memoizeWithExpiration(supplier, 30, TimeUnit.MINUTES);
return supplier.get();
}
我们有不同的应用程序来更新client
表,另一个应用程序是从client
表中读取并如上所述进行缓存,并且在这些应用程序之间没有Restful
或任何类型的api通信2个应用程序。每当数据库中相应的client
表被更新而不是在30分钟的特定时间窗口刷新时,是否有任何方法可以触发此缓存更新?
答案 0 :(得分:0)
因此,从这个问题出发,我将假设:
A
和B
table X
A
从table X
读取并缓存数据B
将数据写入table X
A
需要知道B
是何时写入table X
的,以便A
可以更新其缓存的数据。
如果您控制A
和B
,则可以扩展行为-当B
写入数据库并且写入成功时, B
会触发A
事件(例如调用REST端点),A
将知道更新其缓存。
如果您无法控制B
,但是可以控制A
和DB
,则可以使用DB
作为集成点-这是一种常见的处理方法旧版应用程序-DB
是唯一可以集成应用程序的地方。
因此,您可以再次应用与 B
相同的概念向A
触发事件,但是这次事件(由触发器启动)存储在表中在DB
中进行操作,REST调用是使用内部过程从数据库本身进行的。
直接的方法是:
B
将数据写入table X
insert trigger
有一个table X
,它在事件存储表中执行了一条INSERT语句(我们称之为UPDATE_CACHE_EVENT
)您的“ update_cache_event”现在会被触发(例如保存在该表中),从这一点开始,您有了更多选择:
A
可以每秒监视此表并在写入新事件时触发其缓存更新
A
公开了REST API,该API是从DB
调用的,例如在SQL Server中编写一个过程,该过程监视UPDATE_CACHE_EVENT
表并调用A
的REST API。
一些想法:
table X
都会调用事件表的另一个插入内容),因此在设计解决方案时应考虑这一点。