内容提要
CaffeineCache是基于Guava Cache开发的高性能本地缓存,适用于存储数据库查询结果和接口返回值。它支持多种缓存添加策略,如手动加载、自动加载和异步加载。Caffeine的驱逐策略包括基于容量、时间和权重,性能优于Guava Cache。本文提供了多种使用示例,展示了Caffeine的操作和性能优势,适合开发者在本地缓存场景中使用。
延伸解读
异常处理:cache.get 不会返回 null
文章通过示例验证了当缓存加载函数抛出异常时,cache.get 并不会如官方文档所说返回 null,而是直接抛出异常。这意味着开发者不能依赖返回 null 来处理加载失败,而应该使用 try-catch 捕获异常,并根据业务需求决定是降级、重试还是向上抛出。
刷新机制:访问触发与旧值返回
Caffeine 的 refreshAfterWrite 不会在过期后立即刷新,而是在下一次访问时触发刷新,且刷新期间返回旧值,直到刷新完成。这可能导致短暂的数据不一致,适合对实时性要求不高的场景。若需要强一致性,应结合手动刷新或使用 expireAfterWrite 强制过期。
驱逐监听器:removalListener 与 evictionListener
文章通过示例表明,removalListener 在元素被驱逐或手动移除时都会触发,而 evictionListener 仅在元素被驱逐时触发。开发者应根据业务需求选择:若需要记录所有移除操作(包括手动清除),使用 removalListener;若只关心自动驱逐,则使用 evictionListener。
性能对比:Caffeine 总体优于 Guava Cache
文章在 Apple M3、18GB 内存、JDK1.8 环境下进行了多组测试,结果显示 Caffeine 在存、取、删操作上的总体性能均优于 Guava Cache,尤其在读操作上优势明显。但作者也指出,这是基于本地单机的简单测试,结果受硬件和线程影响较大,建议参考官方测试以获得更可靠的结论。
Q&A
CaffeineCache与Guava Cache的主要区别是什么?
CaffeineCache是基于Guava Cache开发的高性能本地缓存,性能优于Guava Cache,适合存储数据库查询结果和接口返回值。
CaffeineCache支持哪些缓存添加策略?
CaffeineCache支持手动加载、自动加载、手动异步加载和自动异步加载等多种缓存添加策略。
CaffeineCache的驱逐策略有哪些?
CaffeineCache的驱逐策略包括基于容量、时间和权重。
CaffeineCache的性能测试结果如何?
性能测试表明,CaffeineCache的总体性能优于Guava Cache,适合高效的本地缓存需求。
如何在CaffeineCache中实现异步加载?
可以使用AsyncCache类,通过cache.get(key, k -> getValue(key))实现异步加载,返回CompletableFuture。
CaffeineCache的移除操作有哪些?
CaffeineCache提供invalidate、invalidateAll和invalidateAll()等方法来移除缓存中的元素。