更新缓存时发出新值的发布者

Publisher that emits new values when the cache is updated

有没有办法包装缓存并创建一个将发出新值的发布者?

我有一个数据管道(由 Kafka Streams 提供)并且需要通过 GraphQL 订阅提供结果。为了避免不得不处理 ~10k 临时消费者,我想预加载缓存。基本上我需要一个 Publisher 或 kotlin 协程 Flow 来包装缓存,侦听更新事件并发出新值。

简答,不使用 Spring's Cache Abstraction(API 或注释),直接。

在应用层,您需要编写一个 AOP Aspect,封装在缓存更新后通过发布者发出事件的功能,然后组合并排序您的事件发出 (Spring) AOP Aspect/Advice 通过 Spring 的缓存抽象[=32] 将缓存建议应用于您的(例如)@Cacheable 注释应用程序服务方法=].如果您想对应用程序逻辑保持这种关注,则可以这样做,这可能更可重用。

但是,另一种可能更简单的方法(取决于您的 缓存提供商 )是简单地实现 缓存提供商 [=32] 提供的回调接口=]本身,如果确实存在这样的回调。

例如,Apache Geode, which can serve as a caching provider in Spring's Cache Abstraction (& framework) you can implement an application-specific Apache Geode CacheListener 根据缓存更新的类型(例如创建、更新、销毁、失效(通常由过期触发)等)实现您想要的行为。不过,此接口依赖于 缓存提供程序 。但是,另一方面,就缓存而言,这会更可靠,因为 @Cacheable 应用程序服务方法触发的缓存操作肯定会改变,例如。

无论如何,我希望这能给你一些想法。里程因人而异。

干杯!