Guava 本地缓存(Caches)

1.    本地缓存采用的是Guava Cache的expireAfterWrite刷新机制。
 Guava Cache本地缓存基于expireAfterWrite刷新缓存机制。
1)expireAfterWrite缓存刷新是在指定的时间段内没有更新就会被回收。所以对缓存数据时效性高,可以考虑使用expireAfterWrite,使每次更新缓存后在指定时间让缓存失效,
然后重新加载缓存。而Guaua Cache会限制只有1个加载操作并且进行加锁,其他请求必须阻塞等待这个加载操作完成后,才能获得锁和获取缓存值,这样是有一些性能损耗。
                 2)在CacheLoader<K, V> 的V load(K var1)方法对返回值如果是Null是会抛异常(com.google.common.cache.CacheLoader$InvalidCacheLoadException: CacheLoader returned null for key hi.),
会造缓存刷新失败,所以必需要保证每次加载缓存的数据是非空的值。
 
²  考虑expireAfterWrite以上原因。首先小飞机服务项目缓存的数据都是基础数据,更新的时效性相对不高,所以更改另外一种刷新机制refreshAfterWrite(缓存项上一次更新操作之后多久时间会被定时刷新),
refreshAfterWrite刷新的过程是异步处理的(定时刷新时调用下面reload异步方法)。在刷新操作进行时,缓存值的获取仍然可以向其他线程返回旧值,并不会阻塞等待新值加载完成才能得到缓存值。
另外刷新过程抛出异常,缓存将保留旧值,异常信息可以记录在Clog日志。
CacheBuilder.newBuilder()
        .refreshAfterWrite(duration, unit)
        .build(new CacheLoader<String, T>() {
            @Override
            public T load(String key) throws Exception {
                // TODO
            }

            @Override
            public ListenableFuture<T> reload(final String key, T oldValue) {
               // TODO
            }
        });
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值