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()返回统计数据。

posted on 2015-11-10 14:05  jsy306  阅读(461)  评论(0)    收藏  举报

导航