Google Guava-缓存

本文深入探讨了在项目中使用Guava缓存的实践,包括如何设置缓存大小、过期时间,以及如何利用LRU策略和removalListener进行资源管理。通过具体代码示例,展示了如何创建带有过期时间的缓存,并解释了expireAfterWrite和expireAfterAccess的区别。

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

项目需要使用缓存,恰好缓存对象不适合存储为字符串,而且为了高性能希望能有过期时间和LRU特性。 LRU好办,直接集成JDK自带的LinkedHashMap,实现removeEldestEntry方法就行。 可是过期时间就需要自己实现了,实现思路到还不复杂,可以需要测试。最后还是决定找找看看现有类库是否已经提供该功能,首先想到的就是Guava,一看文档果然提供了这种类。

直接上代码

LoadingCache<Key, Graph> graphs = CacheBuilder.newBuilder()
       .maximumSize(1000)
       .expireAfterWrite(10, TimeUnit.MINUTES)
       .removalListener(MY_LISTENER)
       .build(
           new CacheLoader<Key, Graph>() {
             public Graph load(Key key) throws AnyException {
               return createExpensiveGraph(key);
             }
           });

关于cache大小和过期时间,代码中直接可见不需要解释。

关于过期时间有两种选项一种是expireAfterWrite,一种是expireAfterAccess。我们项目中实际使用的expireAfterAccess, 我们希望如果这个key一致被访问化就一致有效,不要过期。 每个项目实际业务不同可以根据情况进行选择。

关于removalListener, 我们可以在对象因为过期时间到达或者因为LRU被替换时,调用一些destroy工作。

引用;
1, https://github.com/google/guava/wiki/CachesExplained

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值