JetCache缓存更新机制!
JetCache缓存更新机制!
月伴飞鱼JetCache是一个基于Java的缓存系统封装,提供统一的API和注解来简化缓存的使用。
JetCache提供了比SpringCache更加强大的注解,可以原生的支持TTL、两级缓存、分布式自动刷新。
- 还提供了Cache接口用于手工缓存操作。
当前有四个实现,RedisCache、TairCache、CaffeineCache,要添加新的实现也是非常简单的。
官网地址:https://github.com/alibaba/jetcache
官方文档:https://github.com/alibaba/jetcache/tree/master/docs/CN
缓存定时刷新
JetCache支持多级缓存,也就是本地缓存和远程缓存。
缓存的实时性一直都是需要考虑的问题。
通常为了尽可能地保证缓存的实时性,都会去采用一些策略,比如更新数据库时同时删除缓存,又或者是使用缓存双删等策略。
而在JetCache中,它还支持定时地去刷新缓存,又进一步地能够保证缓存的实时性。
当我们去访问每一个Key的时候,JetCache都会对这个Key生成一个RefreshTask任务。
- 然后会把这个RefreshTask任务交给定时任务调度器。
在执行RefreshTask任务的过程中,主要就是分为两种情况,一种是当前使用了远程缓存,一种是没有使用远程缓存。
如果使用了远程缓存,那么此时会先去获取锁,只有获取锁成功了,才会去从数据库中加载数据然后刷新到远程缓存中。
如果没有抢到锁,但是又使用了多级缓存(本地缓存+远程缓存)。
那么这时候就会延迟一段时间才会去把远程缓存的时候刷新到本地缓存。
延迟的原因是因为抢到锁的节点这时候可能还没有完成数据的加载到远程缓存中。
而正是因为这个延迟,就会有可能导致多节点间本地缓存数据不一致的情况。
针对这种情况,JetCache则是通过缓存更新通知机制去进行兜底。













