Guava catch缓存相关

1. 说明  Guava的缓存是java语言的,使用该缓存是缓存在本地的内存中,所以使用的时候要注意本地机器的性能(主要是内存大小,避免内存溢出),如果想缓存在其他机器的话,不要使用这种缓存(使用redis,es等其他方式放在其他机器存储数据)。适用guana catch的场景:1. 以空间换时间,消耗一些内存来换取响应速度2. 被缓存的数据会被查询一次以上,如果只查询一次那么缓存没有任何...
摘要由CSDN通过智能技术生成

1. 说明

  Guava的缓存是java语言的,使用该缓存是缓存在本地的内存中,所以使用的时候要注意本地机器的性能(主要是内存大小,避免内存溢出),如果想缓存在其他机器的话,不要使用这种缓存(使用redis,es等其他方式放在其他机器存储数据)。
适用guava Cache的场景:

1. 以空间换时间,消耗一些内存来换取响应速度
2. 被缓存的数据会被查询一次以上,如果只查询一次那么缓存没有任何意义。

   使用guava Cache本地缓存的话,它和ConcurrentMap有很多相似地方,但是也不完全一样。最主要的区别是ConcurrentMap会一直保留添加的元素直到使用者显示的移除(手动remove),而在guava Cache中为了限制内存的使用空间通常会自动的对内存进行回收。

2. 构建

1.自动加载
  使用CacheBuilder Build()的时候 传入一个CacheLoader,实现其中的load方法:

private static LoadingCache<Integer, String> loadingCache() {
		return CacheBuilder.newBuilder()
			.build(new CacheLoader<Integer, String>() {
					@Override
					public String load(Integer key) {
				    //如果在当前的缓存中不存在该值,则使用该方法来获取,一般会是从数据库中拿
						return InitValueByKey(key);
					}
				});
	}

这是缓存默认的获取方式,“去缓存取–如果没有该值就获取–将值存入缓存”,是guava Cache的原则。当然上面是最简单的Cache初始化方式,应用的时候根据实际情况可以方法来设置一些其他属性(大小、缓存时间、移除时的监听器、权重等)。

需注意:
  从LoadingCache查询的正规方式是使用get(K)方法。这个方法要么返回已经缓存的值,要么使用CacheLoader向缓存原子地加载新值。由于CacheLoader可能抛出异常(load方法throws异常),LoadingCache.get(K)也声明为抛出ExecutionException异常。如果你定义的CacheLoader没有声明任何检查型异常,则可以通过getUnchecked(K)查找缓存;但必须注意,一旦CacheLoader声明了检查型异常(load方法是否throws异常),就不可以调用getUnchecked(K)。

2.Callable方式
  所有类型的Guava Cache,不管有没有自动加载功能,都支持get(K, Callable)方法,其中的Callable参数就是,如果Cache中get不到key对应的value值,则使用声明的方法来获取值,并存入缓存中,同样是“去缓存取–如果没有该值就获取–将值存入缓存”原则,在此处如果既有callable方式又有load方法的话,优先使用callable的方式,即只要使用了get(K, Callable)方法,就用callable的方式。

stringCache.g
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值