Caffeine CacheLoader执行逻辑

1 CacheLoader接口

关键方法有2个 reload(K key, V oldValue) 和 load(K key)

a 当缓存未命中key时,会同步调用load(K key),其他线程阻塞等待(首次访问触发load) 


b 当缓存命中key时,会创建一个线程异步调用reload(K key, V oldValue)方法(代码:BoundedLocalCache#refreshIfNeeded 中 cacheLoader.asyncReload),当前线程直接返回old值(到了refresh的时间点触发reload)

如果reload方法返回非null时,该key对应的缓存值会被更新; 如果返回null时会删除该key的缓存值,然后执行对应的方法

其他线程不阻塞,直接返回oldValue


2 驱逐缓存逻辑

代码:BoundedLocalCache类的scheduleDrainBuffers()

使用cache的方法时才会触发驱逐逻辑,如果某个cache一直未访问,即使某个key到了过期时间及其他满足驱逐的条件时,也不会被驱逐。


发表评论 / Comment

用心评论~