是否有一种方法来包装缓存并创建一个将发出新值的发布者?
我有一个数据管道(由Kafka Streams提供),并要求通过GraphQL订阅来提供结果。为了避免不得不处理~10k的临时消费者,我想预加载缓存。基本上,我需要一个Publisher
或kotlin协程Flow
来包装缓存,侦听更新事件并发出一个新值。
简短的回答,不直接使用Spring的缓存抽象(API或注解)。
在应用层,你需要编写一个AOP Aspect封装在缓存更新后通过发布者发出事件的功能,然后将事件发出(Spring) AOP Aspect/Advice与缓存通知结合并排序,通过Spring的缓存抽象应用于(例如)@Cacheable
注释的应用程序服务方法。如果您希望将此关注点与应用程序逻辑保持一致,则可以这样做,这可能更具可重用性。
CacheListener
与你想要的行为取决于类型的缓存更新(例如创建,更新,销毁,无效(通常由到期触发),等等)。但是,该接口依赖于缓存提供程序。但是,另一方面,这将更加可靠,因为缓存肯定会因为@Cacheable
应用程序服务方法触发的缓存操作而改变,例如。 无论如何,我希望这能给你一些想法。里程变化。干杯!