如何使用 Caffeine 缓存配置 write behind?
How to configure write behind with Caffeine cache?
我想使用 Caffeine 进行缓存,我需要有一个 write-behind。我想限制写入数据库的次数。 documentation 谈到 write-back cache 所以它应该是可能的,但是没有关于如何配置它的例子。我已经实现了一个 CacheWriter
,但我不明白如何将它配置为例如每 10 秒只调用一次编写器(当然,如果某些内容更改为缓存)。
CacheWriter
是一个扩展点,文档描述了它可能有意义的用例。这些案例超出了库的范围,如果改为实施可能会过于严格。
在正常的写操作(但不是计算)期间自动调用编写器。这确保观察到给定键的更改顺序。对于后写,编写器会将条目添加到异步处理的队列中,例如批处理操作。
在实施此功能时您可能需要考虑,
- 合并更新(例如收集到
LinkedHashMap
)
- 如果超过阈值大小,则在定期回写之前执行批处理
- 如果操作尚未刷新,则从后写缓冲区加载(这避免了不一致的视图,例如由于逐出)
- 根据外部资源的特性处理重试、速率限制和条带化
更新:
Wim Deblauwe 提供了一个很好的 example 使用 RxJava。
我想使用 Caffeine 进行缓存,我需要有一个 write-behind。我想限制写入数据库的次数。 documentation 谈到 write-back cache 所以它应该是可能的,但是没有关于如何配置它的例子。我已经实现了一个 CacheWriter
,但我不明白如何将它配置为例如每 10 秒只调用一次编写器(当然,如果某些内容更改为缓存)。
CacheWriter
是一个扩展点,文档描述了它可能有意义的用例。这些案例超出了库的范围,如果改为实施可能会过于严格。
在正常的写操作(但不是计算)期间自动调用编写器。这确保观察到给定键的更改顺序。对于后写,编写器会将条目添加到异步处理的队列中,例如批处理操作。
在实施此功能时您可能需要考虑,
- 合并更新(例如收集到
LinkedHashMap
) - 如果超过阈值大小,则在定期回写之前执行批处理
- 如果操作尚未刷新,则从后写缓冲区加载(这避免了不一致的视图,例如由于逐出)
- 根据外部资源的特性处理重试、速率限制和条带化
更新:
Wim Deblauwe 提供了一个很好的 example 使用 RxJava。