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到了过期时间及其他满足驱逐的条件时,也不会被驱逐。
版权声明:《 Caffeine CacheLoader执行逻辑 》为Saber原创文章,转载请注明出处!
最后编辑:2022-6-2 08:06:04