这篇“GuavaCache怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“GuavaCache怎么使用”文章吧。
jvm缓存,其实是堆内存的缓存,也就我们常说的本地缓存。常用的像map,set,list等。 不过呢这些缓存并发能力差,也没有较好的删除过期机制,不好维护。 现在介绍一款本地缓存:Guava Cache。
Guava Cache是一款高性能本地缓存,设计来源于CurrentHashMap,可应对高并发,有丰富的策略机制来清除缓存。 下面来具体介绍一下GuavaCache。
一: 基础用法
1、GuavaCache创建:
以上的方式是在build中使用CacheLoader来创建的cache,也可以创建的时候,build中不指定,这时候可以单独写一个方法,使用 Callable callback来获取:
如图,方法中调用cache.get时,创建一个Callable,当本地缓存没有值,会调用call()方法回源查询,再手动放到缓存中返回。
2、cache 删除:
被动删除:
1、基于数据大小的删除:
删除规则: LRU + FIFO (LRU:最近最少访问的优先删除。 如果访问次数一样,先存的先删除)
2、最后一次访问后多久过期:
3、写入多长时间后过期
4、基于引用的删除:
主动删除:
单独删除: cache.invalidate("1"); -- 删除key为1的
批量删除: cache.invalidateAll(Arrays.asList("1","2")); --删除key为1和2的
清空所有: cache.invalidateAll();
二: 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怎么使用”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。