GuavaCache怎么使用

这篇“GuavaCache怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“GuavaCache怎么使用”文章吧。

创新互联建站-专业网站定制、快速模板网站建设、高性价比阜阳网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式阜阳网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖阜阳地区。费用合理售后完善,10多年实体公司更值得信赖。

jvm缓存,其实是堆内存的缓存,也就我们常说的本地缓存。常用的像map,set,list等。 不过呢这些缓存并发能力差,也没有较好的删除过期机制,不好维护。 现在介绍一款本地缓存:Guava Cache。

Guava Cache是一款高性能本地缓存,设计来源于CurrentHashMap,可应对高并发,有丰富的策略机制来清除缓存。  下面来具体介绍一下GuavaCache。

一: 基础用法 

1、GuavaCache创建: GuavaCache怎么使用

以上的方式是在build中使用CacheLoader来创建的cache,也可以创建的时候,build中不指定,这时候可以单独写一个方法,使用 Callable callback来获取:

  GuavaCache怎么使用

如图,方法中调用cache.get时,创建一个Callable,当本地缓存没有值,会调用call()方法回源查询,再手动放到缓存中返回。

2、cache 删除:

被动删除:

1、基于数据大小的删除:

  GuavaCache怎么使用

        删除规则: LRU + FIFO  (LRU:最近最少访问的优先删除。 如果访问次数一样,先存的先删除)

       2、最后一次访问后多久过期:

  GuavaCache怎么使用

       3、写入多长时间后过期

  GuavaCache怎么使用

       4、基于引用的删除:

  GuavaCache怎么使用

   主动删除:

    单独删除: cache.invalidate("1");   -- 删除key为1的

    批量删除: cache.invalidateAll(Arrays.asList("1","2"));   --删除key为1和2的

    清空所有: cache.invalidateAll();

二: GuavaCache原理:

数据结构:

  GuavaCache怎么使用

localcache结构同ConcurrentHashMap类似,分成多个段,可以分段上锁,如图,一个cache的内部结构,整体是一个Segment数组(红色),数组长度决定了并发数。 每一个segment的结构是右边那部分,继承了ReentrantLock,写操作需要获取锁。包含了5个队列和一个table(一个atomic类型的数组)。   队列和table的作用: 我们上面讲了几种删除的方式,这几个队列便是具体实现规则,从上到下依次是: 弱引用对象gc后,需要清理的key。 弱引用对象gc后,需要清理的value。 segment达到临界值后,从队列头删除。 按写入时间排序的队列,时间相同且新的写操作会排到后面。 按访问时间排序的队列,时间相同且新的访问会排到后面。

table: 存储数据。 流程是对key作hash,找到对应的segment,在对key作hash,找到table中的具体节点,存储为ReferenceEntry对象,以链表形式,防止hash冲突。 另外,V不是真正的value,而是用ValueReference封装真正的value。

以上就是关于“GuavaCache怎么使用”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注创新互联行业资讯频道。


网页标题:GuavaCache怎么使用
文章来源:http://myzitong.com/article/gjhcsd.html