guavacache mysql_使用Guava的Cache功能

本文介绍了Google的Guava库中Cache工具的使用,包括如何配置缓存大小、过期时间,以及加载策略。通过示例展示了如何缓存员工ID与用户信息,并提供了批量获取和异常处理的方法。Guava的缓存回收机制包括基于容量、定时和引用回收,还支持弱引用和软引用。此外,文章提到了移除监听器,以便在缓存项被移除时进行相应操作。
摘要由CSDN通过智能技术生成

Guava是google下的一个java工具类的项目,官方网站:https://github.com/google/guava,其中集合工具,缓存工具和并发工具是比较常用的几个工具集。

使用方法是pom中引入对应的包

com.google.guava

guava

19.0

以下是常用的使用方法,我们需要把一个员工的工号(Interge.class)和他的用户信息(User.class)缓存起来

LoadingCache users = CacheBuilder.newBuilder()

.maximumSize(1000)

.expireAfterWrite(10, TimeUnit.MINUTES)

.build(

new CacheLoader() {

public User load(Integer empId) throws Exception {

return getUserByEmpId(empId);

}

});

User user=users.get(TEST_EMPID);

其中load方法只有在缓存中没有对应的数据的时候被调用,其他的时候会从缓存中取到

其中load方法是会抛出Exception的,如果不抛出对应的Exception,则调用的时候也可以使用getUnchecked(K)

在调用的时候也可以使用getAll(Iterabale extends K>)的方式获取批量数据。

另外Guava的Cache也可以使用get(K,Callaleb)的方法,如果有缓存则返回,否则运算缓存再返回

Cache users= CacheBuilder.newBuilder()

.maximumSize(1000)

.build();

try {

cache.get(TEST_EMPID, new Callable() {

@Override

public User call() throws AnyException {

return getUserByEmpId(empId);

}

});

} catch (ExecutionException e) {

throw new OtherException(e.getCause());

}

Guava的缓存有3种,

1 基于容量回收,这个和设置的maximunSize有关

2 定时回收,这个和设置的expireAfterAccess,expiredAfterWrite有关

3 基于引用回收,这个和设置的weakKeys,weakValues和softValues有关。

CacheBuilder.weakKeys():使用弱引用存储键。当键没有其它(强或软)引用时,缓存项可以被垃圾回收。因为垃圾回收仅依赖恒等式(==),使用弱引用键的缓存用==而不是equals比较键。

CacheBuilder.weakValues():使用弱引用存储值。当值没有其它(强或软)引用时,缓存项可以被垃圾回收。因为垃圾回收仅依赖恒等式(==),使用弱引用值的缓存用==而不是equals比较值。

CacheBuilder.softValues():使用软引用存储值。软引用只有在响应内存需要时,才按照全局最近最少使用的顺序回收。考虑到使用软引用的性能影响,我们通常建议使用更有性能预测性的缓存大小限定(见上文,基于容量回收)。使用软引用值的缓存同样用==而不是equals比较值。

Guava支持设置一个移除监听器,当你移除一个缓存项的时候做对应的操作

RemovalListener removalListener = new RemovalListener() {

public void onRemoval(RemovalNotification removal) {

DatabaseConnection conn = removal.getValue();

conn.close(); // tear down properly

}

};

参考文档:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值