文档章节

guava cache使用介绍

jack_peng
 jack_peng
发布于 11/21 19:06
字数 541
阅读 32
收藏 1

今天在项目中发现大量使用guava cache提供缓存,觉得不错。

jvm堆大小为5G

 

/**
     * 
     *  占用JVM内存,内部数据结构类似于ConcurrentHashMap。
		因为JVM堆大小的限制,guava cache只能保存较少的数据量,不能超过JVM Heap。
		相对Redis等“分布式缓存”,它本身不需要RPC调用,性能较高。
     * Guava cache读取过程也符合“get-if-absent-compute”语义,
     * 即如果本地缓存中有,则返回对应value,如果key不存在,则通过“加载机制”获取新的value。
     */
    private LoadingCache<String, List<CategoryVO>> listCache = CacheBuilder.newBuilder()
            // 自动定时刷新功能,在查询的时候去比对上次更新的时间,如超过指定时间则进行加载或刷新
    		// 限制只有1个重新加载操作,而其他查询先返回旧值,这样有效地可以减少等待和锁争用
    		.refreshAfterWrite(30, TimeUnit.SECONDS)
            // 当key在被“read/write”操作之后,空闲多久后被删除。
            .expireAfterAccess(duration, unit)
            // 当key被write(put或者reload)操作之后,空闲多久后被删除。
            // 限制只有1个加载操作时进行加锁,其他请求必须阻塞等待这个加载操作完成,有锁等待问题
            .expireAfterWrite(duration, unit)
    		 //指定cache中允许的key的个数。如果key的个数即将超过阀值(边际),将会根据LRU算法,剔除那些不常用的K-V
            .maximumSize(size) 
    		// 如果你的每个Key-Value有不同的“weights”--比如每个K-V占用不同的内存量,我们可以用“weight”来描述这一指标。 
    		// 当cache中put一个key时,都会计算它的weight值,并累加,当达到maximumWeight阀值时,会触发剔除操作。
   		    .maximumWeight(weight)
    		.weigher(new Weigher<String, List<CategoryVO>>() {
				@Override
				public int weigh(String key, List<CategoryVO> value) {
					return 0;
				}
			})
            .removalListener(notification -> logger.info("[categoryCache] " + notification.getKey() + " was removed, cause is " + notification.getCause()))
            .build(new CacheLoader<String, List<CategoryVO>>() {
                @Override
                public List<CategoryVO> load(String key) {
                    switch (key) {
                        case GuavaKey.GUAVA_CATEGORY_LIST_COMMON_KEY:
                            return getCategoryList(GlobalUserConstant.USER_TYPE_COMMON);
                        
                        default:
                            return null;
                    }
                }
            });

 

© 著作权归作者所有

共有 人打赏支持
jack_peng
粉丝 12
博文 63
码字总数 15229
作品 0
成都
私信 提问
Guava库学习:学习Guava Cache(七)RemovalListener(1)

原文地址: Guava库学习:学习Guava Cache(七)RemovalListener(1)RemovalNotification 上一篇,Guava库学习:学习Guava Cache(六)CacheStats中我们学习了使用CacheStats获取缓存的一些...

Realfighter
2014/12/21
0
0
深入理解分布式系统中的缓存架构(上)

本文主要介绍大型分布式系统中缓存的相关理论,常见的缓存组件以及应用场景。 1 缓存概述 缓存概述 2 缓存的分类 缓存主要分为以下四类 缓存的分类 2.1 CDN缓存 基本介绍 CDN(Content Delive...

Java填坑之路
07/13
0
0
快速掌握:大型分布式系统中的缓存架构

本文主要介绍大型分布式系统中缓存的相关理论,常见的缓存组件以及应用场景。 缓存概述 缓存概述 缓存的分类 缓存主要分为四类,如下图: 缓存的分类 CDN 缓存 CDN(Content Delivery Network...

技术小能手
08/06
0
0
Google的Guava cache 应用

Guava Cache 创建 基本上可以通过两种方式来创建cache: cacheLoader callable callback 通过这两种方法创建的cache,和通常用map来缓存的做法比,不同在于,这两种方法都实现了一种逻辑——...

rich_xu
2013/11/13
0
0
Google Guava之--cache

一、简介   Google Guava包含了Google的Java项目许多依赖的库,如:集合 [collections] 、缓存 [caching] 、原生类型支持 [primitives support] 、并发库 [concurrency libraries] 、通用注...

烟火_
2014/10/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

VMware前路难测,多个厂家群雄逐鹿

在人们高谈Salesforce、亚马逊等新兴云计算厂商取得的成就时,以VMware、HPE和Cisco为代表的老牌厂商也在进行着自己的转型和变化,而且还取得一定的进展。以VMware为例,虚拟机巨头公布了第二...

linux-tao
16分钟前
1
0
Palindrome Linked List(leetcode234)

Given a singly linked list, determine if it is a palindrome. Example 1: Input: 1->2Output: false Example 2: Input: 1->2->2->1Output: true Follow up: Could you do it in O(n) ......

woshixin
18分钟前
1
0
【宇润日常疯测-003】PHP 序列化和 JSON 哪个更好?

有了 Swoole 以后,用我们熟悉的 PHP 就可以很方便地开发网络通信应用。有时候我们系统内部需要交换数据,那么,这时候问题来了,网络通讯的数据格式是选择 JSON 还是 serialize 呢? 一通分...

宇润
18分钟前
2
0
mybatis批量操作sql配置

在写批量sql操作时,遇到执行报错: <foreach collection="list" item="item" index="index" separator=";"> update t_xxx set column1=#{item.column1} where id= #{item.id} </foreach> 分......

lar555
31分钟前
2
0
L2TP VPN客户端配置

打开网络设置-->选择VPN-->添加VPN链接 配置完毕,打开更改适配器选项 右键-->属性 选中安全---允许使用安全协议,确定保存后连接vpn即可

阿伦哥-
35分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部