GUAVA CACHE
guava的cache接口有两个,一个为cache,另外一个为loadingcache.
cache的实现类,如locaclManulCache,其实它内部有个localCache.通过cacheBuilder创建。
cache的expire通过设置时间时间,在put数据的时候,会保存一个time,在get数据的时候,会调用getlivedata,它会
把数据取出来,把时间和当前时间进行对比,判断是否过期。
localCache通过段的方式实现的,有很多段,每个段里面保存了一个table,table是一个
AtomicReferenceArray数组,每个元素的类型为ReferenceEntry。ReferenceEntry存储了key、value、accesstime之类的各种数据。
在loadingcache中,get()一个数据,调用localcache的get(key, valueloader),它调用Segment的get(key,hash, loader),若没有数据,会等到把数据load进来
getifpresent会调用localcache的getIfPresent,它调用Segment的get(key,hash),若没有数据,会直接返回null.
removeListener:在remove数据的时候调用,在cache中put一次数据会remove掉以前的数据。
在get或者getifpresent数据时,会异步的调用load去加载数据。
cache的stats统计,在cachebuilder创建cache时,可以调用recordStats(),它会给Supplier创建一个统计类,若没调用
recordStates,则会创建一个默认的统计类,这个统计类什么都不干,方法都为空。在cache初始化时,会把统计类的引用复制,
通过supplier.get().在操作时,则调用统计类的方法统计数据。最后cache.stats()返回统计数据。
浙公网安备 33010602011771号