当前位置: 首页 > article >正文

Caffeine Cache Java缓存组件

缓存组件Caffeine Cache

  • 定义介绍
  • 整合springboot用法
  • 整合spring-boot-starter-cache用法

定义介绍

特性
高性能:基于高效并发设计和 TinyLFU 算法,命中率高。
丰富策略:支持容量限制、过期时间、异步加载、自定义清理策略。
统计监控:内置 recordStats 提供命中率等监控数据。
Spring 集成:支持与 Spring Cache 无缝对接。

优点
性能卓越,易用性强,配置灵活,内置监控,轻量级无额外依赖。

缺点
仅限本地缓存,无分布式支持,需手动管理内存,无持久化能力。
适用场景
单机高并发场景,如配置缓存、字典数据等频繁访问数据的缓存需求。

总结
Caffeine 是性能优异的本地缓存工具,但适用于单机场景,不支持分布式和持久化。

整合springboot用法

启动类加:@EnableCaching

@SpringBootApplication
@EnableCaching
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

}

1.导入依赖(springboot项目会自动管理版本)

        <dependency>
            <groupId>com.github.ben-manes.caffeine</groupId>
            <artifactId>caffeine</artifactId>
        </dependency>
2.注入一个bean
@Configuration
public class CacheConfig {
    @Bean
    public Cache<String, Object> caffeineCache() {
        return Caffeine.newBuilder()
                // 设置最后一次写入或访问后经过固定时间过期
                .expireAfterWrite(60, TimeUnit.SECONDS)
                // 初始的缓存空间大小
                .initialCapacity(100)
                // 缓存的最大条数
                .maximumSize(1000)
                .build();
    }
}

3.使用


    @Autowired
    private Cache<String, Object> caffeineCache;

    public void test1(){
        String key = "";

        //获取key对应value,没有则获取计算值
        Object o = caffeineCache.get(key, (curKey) -> "compute Value");
        // 获取所有list中得key对应得值,返回一个map,否则返回计算map
        Map<String, Object> all = caffeineCache.getAll(new ArrayList<>(), (curkey) -> new HashMap<>());

        //获取值,没有返回null
        caffeineCache.getIfPresent(key);
        caffeineCache.getAllPresent(new ArrayList<>());

        //获取缓存所有值作为一个map
        ConcurrentMap<@NonNull String, @NonNull Object> map1 = caffeineCache.asMap();

        //删除指定key
        caffeineCache.invalidate(key);
        //删除所有指定key
        caffeineCache.invalidateAll(new ArrayList<>());
        //删除所有key
        caffeineCache.invalidateAll();

        //存值
        caffeineCache.put(key, "value");
        caffeineCache.putAll(new HashMap<>());

        //惰性执行,仅清理过期数据
        caffeineCache.cleanUp();

        //获取缓存中键值对的近似数量
        caffeineCache.estimatedSize();


        /**
         * 查询缓存中条目的额外信息
         * expireAfter(): 获取与过期策略相关的信息。
         * eviction(): 获取与驱逐策略相关的信息(如缓存的最大大小)。
         * refreshAfterWrite(): 获取与写后刷新相关的信息(如果配置了该策略)。
         */
        Policy<String, Object> policy = caffeineCache.policy();

        /**
         * 统计信息包括缓存命中率、加载成功率、驱逐条目数量
         * hitCount(): 缓存命中次数。
         * missCount(): 缓存未命中次数。
         * loadSuccessCount(): 成功加载新值的次数。
         * evictionCount(): 被驱逐的条目数量。
         */
        caffeineCache.stats();
    }

整合spring-boot-starter-cache用法

启动类加:@EnableCaching

@SpringBootApplication
@EnableCaching
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

}

1.导入依赖:

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

2.yml配置

spring:
  cache:
    type: CAFFEINE # 指定使用 Caffeine 作为缓存类型
    caffeine:
      spec: maximumSize=1000,expireAfterWrite=10m,recordStats # 配置 Caffeine 缓存策略,采用 CacheBuilderSpec 的语法
      # maximumSize=1000: 设置缓存的最大容量为 1000 条记录,超出时采用最近最少使用(LRU)策略移除。
      # expireAfterWrite=10m: 设置缓存条目在写入后 10 分钟过期。
      # recordStats: 启用缓存统计功能,用于监控缓存的命中率、加载时间等数据。

3.用法和redis一样,用什么缓存用户是无感知的
查看:https://blog.csdn.net/m0_56182317/article/details/129871802?spm=1001.2014.3001.5501
即可


http://www.kler.cn/a/460679.html

相关文章:

  • 沁恒CH32V208GBU6蓝牙MTU二:减小连接间隔提升速度;修改GAP里面的连接参数提高兼容性
  • 硬件工程师面试题 21-30
  • android studio android sdk下载地址
  • 利用多GPU,推理transformer模型,避免显存溢出
  • STM32拓展 低功耗案例1:睡眠模式 (register)
  • java中的基本数据类型有哪些?
  • 以图像识别为例,关于卷积神经网络(CNN)的直观解释
  • 【Golang 面试题】每日 3 题(十二)
  • FPGA交通灯实现
  • Spring Boot 3 构建统一的请求响应参数、异常处理、以及统一的异常状态码
  • 在计算机网络中,什么是集群?
  • SPI扩展类与普通bean类的区别
  • 税务门户网站:构建安全的在线税务服务环境
  • macos 远程开发,实现文件自动同步
  • 全国青少年信息学奥林匹克竞赛(信奥赛)备考实战之循环结构(for循环语句)(六)
  • 【C++】类和对象(中):类的默认成员函数
  • xterm + vue3 + websocket 终端界面
  • [2474].第04节:Activiti官方画流程图方式
  • 【开源免费】基于SpringBoot+Vue.JS安康旅游网站(JAVA毕业设计)
  • spring cloud-skywalking入门指南
  • XShell实现自动化执行脚本.sh文件)(网络安全检查)
  • 2024年的年终总结
  • vue.js 组件通信
  • HTML5实现喜庆的新年快乐网页源码
  • LiteFlow 流程引擎引入Spring boot项目集成pg数据库
  • 初始JavaEE篇 —— Maven相关配置