Guava---缓存

Google Guava框架提供了内存缓存功能,支持设置生命周期、对象引用类型。Guava缓存的过期时间有两种方式,可按写入或最后访问时间计时,并且是针对整个缓存组设置,不同于其他缓存系统。缓存设计为一组对象一个实例,便于设定不同缓存策略,如弱引用、软引用、过期时间和最大项数。但这也意味着每个业务可能需要单独的缓存实例,管理和组织上可能带来挑战。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

google guava框架提供了内存缓存的功能,可以很方便的缓存对象,设置生命周期, 及缓存对象的弱引用 强应用 软引用等.

所在包:package com.google.common.cache;

//LoadingCache在缓存项不存在时可以自动加载缓存
private LoadingCache<Key,String> dictCache = CacheBuilder.newBuilder()
            .maximumSize(200)//设置缓存最大容量为200,超过200之后就会按照LRU最近虽少使用算法来移除缓存项
            .expireAfterWrite(30, TimeUnit.MINUTES)//设置写缓存后30分钟过期,过期后会触发removalListener
            .concurrencyLevel(4)//并发级别为4,并发级别是指可以同时写缓存的线程数
            .removalListener(new RemovalListener<Object, Object>() {//这段代码可以移除
                @Override
                public void onRemoval(RemovalNotification<Object, Object> notification) {
                    LOG.debug("");
                }
            })
            //build方法中可以指定CacheLoader,在缓存不存在时通过CacheLoader的实现自动加载缓存
                .build(
            .build(new CacheLoader<Key,String>() {
                @Override
                public String load(Key key) throws Exception {
                    return loadFromDb(key);
                }
            });

guava缓存过期时间分为两种,一种是从写入时开始计时,一种是从最后访问时间开始计时,而且guava缓存的过期时间是设置到整个一组缓存上的;这和EHCache,redis,memcached等不同,这些缓存系统设置都将缓存时间设置到了单个缓存上。

guava缓存设计成了一组对象一个缓存实例,这样做的好处是一组对象设置一组缓存策略,你可以根据不同的业务来设置不同的缓存策略,包括弱引用,软引用,过期时间,最大项数等。另外一点好处是你可以根据不同的组来统计缓存的命中率,这样更有意义一些。

这样做也是有缺点的,缺点是首先是每个缓存组都需要声明不同的缓存实例,具体到业务程序中可能就是每个业务对象一个缓存了。这样就把不同的业务缓存分散到不同的业务系统中了,不太好管理。

参考文献:
使用google guava做内存缓存

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值