温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

GuavaCache怎么使用

发布时间:2022-01-15 16:14:51 来源:亿速云 阅读:148 作者:iii 栏目:大数据

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

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<K,V>对象,以链表形式,防止hash冲突。 另外,V不是真正的value,而是用ValueReference封装真正的value。

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

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI