行业资讯

首页-安信10娱乐-安信10平台-西安财务代理安信10注册

2022-11-30 10:22:07 yqs888 0

首页-安信10娱乐-安信10平台-西安财务代理安信10注册报道,通过《重新认识下JVM级别的本地缓存框架Guava Cache——优秀从何而来》一文,我们知道了Guava Cache作为JVM级别的本地缓存组件的诸多暖心特性,也一步步地学习了在项目中集成并使用Guava Cache进行缓存相关操作。Guava Cache作为一款优秀的本地缓存组件,其内部很多实现机制与设计策略,同样值得开发人员深入的掌握与借鉴。

作为系列专栏,本篇文章我们将进一步探讨下Guava Cache 实现层面的一些逻辑与设计策略,让我们可以对Guava Cache整体有个更加明朗的认识。

安信10娱乐


数据回源与回填策略

前面我们介绍过,Guava Cache提供的是一种穿透型缓存模式,当缓存中没有获取到对应记录的时候,支持自动去源端获取数据并回填到缓存中。这里回源获取数据的策略有两种,即CacheLoader方式与Callable方式,两种方式适用于不同的场景,实际使用中可以按需选择。

下面一起看下这两种方式。

CacheLoader

CacheLoader适用于数据加载方式比较固定且统一的场景,在缓存容器创建的时候就需要指定此具体的加载逻辑。常见的使用方式如下:

public LoadingCache<String, User> createUserCache() {    return CacheBuilder.newBuilder()             .build(new CacheLoader<String, User>() {                @Override                 public User load(String key) throws Exception {                     System.out.println(key + "用户缓存不存在,尝试CacheLoader回源查找并回填...");                    return userDao.getUser(key);                 }             });     }

上述代码中,在使用CacheBuilder创建缓存容器的时候,如果在build()方法中传入一个CacheLoader实现类的方式,则最终创建出来的是一个LoadingCache具体类型的Cache容器:

安信10娱乐


默认情况下,我们需要继承CacheLoader类并实现其load抽象方法即可。

安信10娱乐


当然,CacheLoader类中还有一些其它的方法,我们也可以选择性的进行覆写来实现自己的自定义诉求。比如我们需要设定refreshAfterWrite来支持定时刷新的时候,就推荐覆写reload方法,提供一个异步数据加载能力,避免数据刷新操作对业务请求造成阻塞。