Caffeine Cache基础入门

Caffeine Cache基础入门

Caffeine Cache 以其高性能和可扩展性赢得「 本地缓存之王 」的称号,它是一个 Java 缓存库。

Spring Boot 1.x 版本中的默认本地缓存是 Guava Cache。但在 Spring5 (SpringBoot 2.x)后,Spring 官方放弃了 Guava Cache 作为缓存机制,而是使用性能更优秀的 Caffeine 作为默认缓存组件。

Caffeine 官方测试报告:https://github.com/ben-manes/caffeine/wiki/Benchmarks-zh-CN

缓存介绍

image.png

Caffeine特点

1、自动将数据加载到缓存中,同时也可以采用异步的方式加载。

2、内存淘汰策略:基于频次、基于最近访问、最大容量。

3、根据上一次的缓存访问\上一次的数据写入决定缓存的过期的设置。

4、当一条缓存数据过期了,自动清理,清理的时候也是异步线程来做。

5、考虑JVM的内存管理机制,加入弱引用、软引用。

6、缓存数据被清理后,会收到相关的通知信息

7、缓存数据的写入可以传播到外部的存储。

8、统计功能:被访问次数,命中,清理的个数,加载个数

Caffeine Cache入门

官网地址:https://github.com/ben-manes/caffeine

Maven引入

   <!-- Spring boot Cache-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-cache</artifactId>
        </dependency>
        <!--for caffeine cache-->
        <dependency>
            <groupId>com.github.ben-manes.caffeine</groupId>
            <artifactId>caffeine</artifactId>
            <version>2.7.0</version>
        </dependency>

Cache是一个核心的接口,里面定义了很多方法,我们要使用缓存一般是使用Cache的的子类,根据官方的方法,我们通过caffeine这个类来获得实现Cache的类。

基本使用-简单

Cache是一个核心的接口,里面定义了很多方法,我们要使用缓存一般是使用Cache的的子类,根据官方的方法,我们通过caffeine这个类来获得实现Cache的类。

 public static void Cache() throws Exception{
        Cache<String, String> cache = Caffeine.newBuilder()//构建一个新的Caffeine实例
                .maximumSize(100)//设置缓存中保存的最大数量
                .expireAfterAccess(3L, TimeUnit.SECONDS)//如无访问则3秒后失效
                .build();//构建Cache接口实例

        cache.put("mca","www.mashibing.com");//设置缓存项
        cache.put("baidu","www.baidu.com");//设置缓存项
        cache.put("spring","www.spring.io");//设置缓存项

        log.info("获取缓存[getIfPresent]:mca={}",cache.getIfPresent("mca"));//获取数据
        TimeUnit.SECONDS.sleep(5);//休眠5秒

        log.info("获取缓存[getIfPresent]:mca={}",cache.getIfPresent("mca"));//获取数据

    }

最普通的一种缓存,无需指定加载方式,需要手动调用 put()进行加载。需要注意的是,put()方法对于已存在的 key 将进行覆盖。如果这个值不存在,调用 getIfPresent()方法,则会立即返回 null,不会被阻塞。

上面显示效果如下:

image.png

Caffeine 配置说明:

  • initialCapacity=[integer]: 初始的缓存空间大小
  • maximumSize=[long]: 缓存的最大条数,如果达到最大个数,默认会丢弃最早添加的
  • maximumWeight=[long]: 缓存的最大权重
  • expireAfterAccess=[duration]: 最后一次写入或访问后经过固定时间过期
  • expireAfterWrite=[duration]: 最后一次写入后经过固定时间过期
  • refreshAfterWrite=[duration]: 创建缓存或者最近一次更新缓存后经过固定的时间间隔,刷新缓存
  • weakKeys: 打开 key 的弱引用
  • weakValues:打开 value 的弱引用
  • softValues:打开 value 的软引用
  • recordStats:开发统计功能

基本使用-过期数据的同步加载1

有些时候当缓存数据失效的时候,我们可能希望拿到缓存的时候不返回一个null,可以进行一些数的处理,自定义的进行一些操作,这就要用到Cache接口的get方法,这个get方法里面可以实现一个函数式接口,让我们对数据进行自定义的处理:

 public static void CacheExpire() throws Exception{
        Cache<String, String> cache = Caffeine.newBuilder()//构建一个新的Caffeine实例
                .maximumSize(100
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值