如何解决更新缓存时发出新值的发布者
有没有办法包装缓存并创建一个发布新值的发布者?
我有一个数据管道(由 Kafka Streams 提供),并且需要通过 GraphQL 订阅提供结果。为了避免处理 ~10k 临时消费者,我想预加载缓存。基本上我需要一个 Publisher
或 kotlin 协程 Flow
来包装缓存,监听更新事件并发出一个新值。
解决方法
简短回答,不直接使用 Spring's Cache Abstraction(API 或注释)。
在应用层中,您需要编写一个 AOP 方面来封装在缓存更新后通过发布者发出事件的功能,然后组合和排序您的事件发出 (Spring) AOP 方面/Advice 以及 Spring 的缓存抽象应用于您的(例如)@Cacheable
带注释的应用程序服务方法的缓存建议。如果您希望对应用程序逻辑保持这种关注,则可以这样做,这可能会更易于重用。
然而,另一种可能更简单的方法(取决于您的缓存提供者)是简单地实现由您的缓存提供者本身提供的回调接口,如果确实是这样的话回调存在。
例如,使用 Apache Geode,它可以 serve 作为 Spring 的缓存抽象(&框架)中的缓存提供者,您可以实现一个特定于应用程序的 Apache Geode CacheListener
具有您想要的行为,具体取决于缓存更新的类型(例如,创建、更新、销毁、失效(通常由到期触发)等)。不过,这个接口缓存提供者依赖。但是,另一方面,这会更可靠,因为例如 @Cacheable
应用程序服务方法触发的缓存操作肯定会更改缓存。
无论如何,我希望这能给你一些想法。里程数因人而异。
干杯!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。