本地缓存caffeine快速入门

文章介绍了如何在SpringBoot2.7.3项目中集成并使用Caffeine进行本地缓存。通过添加依赖,创建并配置缓存对象,展示了基本操作,包括存储和获取数据,以及基于大小和有效期的驱逐策略。同时提出了创建CaffeineConfig配置类以管理不同类型的缓存对象的建议。
摘要由CSDN通过智能技术生成

本地缓存caffeine快速入门

简便起见,直接在SpringBoot(版本号2.7.3)中演示caffeine的使用。

添加依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>com.github.ben-manes.caffeine</groupId>
    <artifactId>caffeine</artifactId>
</dependency>

使用测试

package com.cas;

import com.github.benmanes.caffeine.cache.Cache;
import com.github.benmanes.caffeine.cache.Caffeine;
import org.junit.jupiter.api.Test;

import java.time.Duration;

public class CaffeineTest {
    @Test
    void testBasicOps() {
        //构建缓存对象
        Cache<String, String> cache = Caffeine.newBuilder().build();
        //存储数据
        cache.put("user", "tom");
        //获取数据
        System.out.println("user: " + cache.getIfPresent("user"));
        //获取数据,未命中时执行回调函数,如查询数据库
        String defaultUser = cache.get("defaultUser", key -> {
            //根据key去数据库查询数据
            return "张三";
        });
        System.out.println("defaultUser: " + defaultUser);
    }

    /**
     * 基于大小的驱逐策略
     */
    @Test
    void testEvictByNum() throws InterruptedException {
        //构建缓存对象
        Cache<String, String> cache = Caffeine.newBuilder()
                //设置缓存大小上限为1
                .maximumSize(1).build();
        //存储数据
        cache.put("user1", "张三");
        cache.put("user2", "李四");
        cache.put("user3", "王五");
        //延迟10ms,给清理线程一点时间
        Thread.sleep(10L);
        //获取数据
        System.out.println("user1: " + cache.getIfPresent("user1"));
        System.out.println("user2: " + cache.getIfPresent("user2"));
        System.out.println("user3: " + cache.getIfPresent("user3"));
    }

    /**
     * 基于有效期的驱逐策略
     */
    @Test
    void testEvictByTime() throws InterruptedException {
        //构建缓存对象
        Cache<String, String> cache = Caffeine.newBuilder()
                //设置缓存有效期为1秒
                .expireAfterWrite(Duration.ofSeconds(1)).build();
        //存储数据
        cache.put("user", "张三");
        //获取数据
        System.out.println("user: " + cache.getIfPresent("user"));
        //休眠一会儿
        Thread.sleep(1200L);
        System.out.println("user: " + cache.getIfPresent("user"));
    }
}

使用建议

可以创建CaffeineConfig配置类,在其中定义各种要用的缓存对象,如 Cache<String, Item>,Cache<String, User>等。

package com.cas.config;

import com.github.benmanes.caffeine.cache.Cache;
import com.github.benmanes.caffeine.cache.Caffeine;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class CaffeineConfig {
    @Bean
    public Cache<String, Object> objectCache() {
        return Caffeine.newBuilder()
                .initialCapacity(100)
                .maximumSize(10000)
                .build();
    }
}

需使用时直接通过@Autowired等注解装配即可。

参考资料

  • https://www.jianshu.com/p/1ceaed0289b7
  • https://www.bilibili.com/video/BV19Y41127Q8
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值