缓存初见——Caffeine的简单使用

本文介绍了Caffeine缓存的基本概念,并详细阐述了三种数据加载方式:手动加载、同步加载和异步加载,帮助理解Caffeine在Java缓存中的应用。

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

Caffeine介绍

在这里插入图片描述在这里插入图片描述

Caffeine的简单使用

使用Caffeine加载数据有三种方式:

1、手动加载,也就是构建缓存的时候并不加载数据,在需要的时候再去加载并缓存

public static void main(String[] args) throws InterruptedException {
    Cache<Object, Object> cache = Caffeine.newBuilder()
            .expireAfterWrite(2000, TimeUnit.MILLISECONDS)
            .maximumSize(10)
            .build();

    Function<Object, Object> func = (key) -> key + "_" + System.currentTimeMillis();

    // 获取key,如果不存在则执行后面的func
    Object key1 = cache.get("key1", func);
    System.out.println(key1);

    TimeUnit.SECONDS.sleep(3);

    // 获取key,不存在则返回null
    Object key11 = cache.getIfPresent("key1");
    System.out.println(key11);

    // 设置key
    cache.put("key2", "value2");
    System.out.println(cache.get("key2", func));
    // key过期
    cache.invalidate("key2");
    // 将缓存中的数据以key=value输出
    System.out.println(cache.asMap());

}

2、同步加载,构建缓存的同时加载缓存数据

    LoadingCache<Object, String> cache = Caffeine.newBuilder()
            .expireAfterWrite(2, TimeUnit.SECONDS)
            .maximumSize(10)
            .build(key -> key + "-" + System.currentTimeMillis());

    // 获取key,不存在则执行build里面的方法进行加载
    System.out.println(cache.get("key1"));

3、异步加载

    AsyncLoadingCache<String, Object> cache = Caffeine.newBuilder()
            .expireAfterWrite(2, TimeUnit.SECONDS)
            .buildAsync(key -> key + "-" + System.currentTimeMillis());

    // 获取不存在的key时,会使用buildAsync()方法中的算法计算出value,存入缓存
    // 异步获取的结果存放在CompletableFuture对象中,可以使用thenAccept()获取结果
    CompletableFuture<Object> future = cache.get("key1");
    future.thenAccept(o -> System.out.println(System.currentTimeMillis() + "-" + o));

    TimeUnit.SECONDS.sleep(3);

    // 不存在则返回null
    CompletableFuture<Object> key2 = cache.getIfPresent("key2");
    System.out.println(key2);
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值