gpt4 book ai didi

java - 表更新时触发 Guava 缓存刷新

转载 作者:行者123 更新时间:2023-12-02 04:48:00 33 4
gpt4 key购买 nike

目前正在使用 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 通信。有什么办法可以在数据库中相应的 client 表更新时触发此缓存更新,而不是在特定时间窗口 30 分钟刷新?

最佳答案

所以从这个问题我会假设:

  • 有两个应用程序AB
  • 有一个客户端表 - 我们称之为 table X
  • Atable X 读取并缓存数据
  • B将数据写入table X

A需要知道什么时候B已写于table X ,这样 A可以更新它的缓存数据。

选项 1

如果你控制AB ,您可以扩展行为 - 当 B 时写入数据库,写入成功, BA 触发事件(例如调用 REST 端点)和 A将知道更新其缓存。

选项 2

如果你无法控制B ,但你可以控制ADB ,您可以使用DB作为集成点 - 这是遗留应用程序的常见方法 - DB是应用程序可以集成的唯一地方。

所以你可以再次应用相同的概念 BA 触发事件,但是这次事件(由触发器发起)存储在 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。

选项 3

Debezium

一些想法:

  • 不要使用触发器本身来调用外部 API,而是使用专用过程
  • 触发器会带来性能损失(例如,每次写入 table X 都会调用事件表中的另一次插入),因此您在设计解决方案时应考虑这一点。

关于java - 表更新时触发 Guava 缓存刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56466572/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com