SpringBoot 集成 Caffeine

Caffeine 和 Spring Cache 依赖,使用注解方法实现缓存

依赖

  1. <!--提供 Spring Boot 中的缓存支持-->
  2. <dependency>
  3. <groupId>org.springframework.boot</groupId>
  4. <artifactId>spring-boot-starter-cache</artifactId>
  5. </dependency>
  6.  
  7. <!-- Caffeine Cache 的具体实现-->
  8. <dependency>
  9. <groupId>com.github.ben-manes.caffeine</groupId>
  10. <artifactId>caffeine</artifactId>
  11. </dependency>

配置缓存

1,Config
  1. package com.james.config;
  2.  
  3. import com.github.benmanes.caffeine.cache.Caffeine;
  4. import org.springframework.cache.CacheManager;
  5. import org.springframework.cache.annotation.EnableCaching;
  6. import org.springframework.cache.caffeine.CaffeineCacheManager;
  7. import org.springframework.context.annotation.Bean;
  8. import org.springframework.context.annotation.Configuration;
  9. import java.util.concurrent.TimeUnit;
  10.  
  11. @Configuration
  12. @EnableCaching
  13. public class CacheConfig {
  14.  
  15. //通过 Caffeine.newBuilder() 构建一个 Caffeine 实例,并设置最大大小为 500 个条目,过期时间为 600 秒
  16. @Bean
  17. public CacheManager cacheManager() {
  18. CaffeineCacheManager cacheManager = new CaffeineCacheManager();
  19. cacheManager.setCaffeine(Caffeine.newBuilder()
  20. .initialCapacity(1000) //// 初始的缓存空间大小
  21. .maximumSize(500) // // 缓存的最大条数
  22. .expireAfterAccess(60, TimeUnit.SECONDS)); // 设置最后一次写入或访问后经过固定时间过期
  23. return cacheManager;
  24. }
  25. }
2,yml
  1. spring:
  2. #通过 spec 属性指定了缓存的一些属性,比如最大大小为 500 个条目,并设置了过期时间为 600 秒 2选一
  3. cache:
  4. caffeine:
  5. spec: maximumSize=500,expireAfterAccess=600s

注解集成

@Cacheable:将方法的返回值缓存起来,并在后续对同样的方法进行调用时,直接返回缓存中的结果,而不会执行方法的实际逻辑;

  1. //那么方法的返回值会被缓存在名为 “myCache” 的缓存中,而不会根据方法的参数进行细分。
    //这种方式适用于方法的返回值在不同参数下是相同的,或者不关心具体的参数对应的缓存
  1. @Cacheable(cacheNames = "myCache")
  2. public String getCachedData(String key) {
  3. // 从数据库或其他数据源获取数据
  4. return data;
  5. }
  1. //则可以根据方法的参数进行细分缓存。每个不同的 Id 参数会对应一个不同的缓存键,从而实现了更精确的缓存控制。
    //这种方式适用于每个参数对应的结果可能不同,或者需要根据不同的参数缓存不同的结果。
  1. @Cacheable(value = "listTypeBook", key = "#Id")
  2. public List<BookEntity> listTypeBook(Integer Id) {
  3. List<BookEntity> bookEntities = bookMapper.listTypeBook(Id);
  4. return bookEntities;
  5. }

@CachePut:用于更新或添加缓存的值。无论缓存是否已存在,该方法都会执行,并将结果放入缓存中;

  1. //方法 updateCache() 将通过 key 更新名为 “myCache” 的缓存的值
  2. //无论是添加缓存还是更新缓存,都会执行方法体内的逻辑,并将结果更新到缓存中
  3. @CachePut(cacheNames = "myCache", key = "#key")
  4. public String updateCache(String key, String value) {
  5. // 更新数据
  6. return updatedData;
  7. }

@CacheEvict:用于从缓存中删除数据。使用该注解会删除指定缓存名称中的一个或多个缓存条目;

  1. //方法 evictCache() 将从名为 “myCache” 的缓存中删除具有指定 key 的缓存条目
  2. @CacheEvict(cacheNames = "myCache", key = "#key")
  3. public void evictCache(String key) {
  4. // 删除数据
  5. }

只引入 Caffeine 依赖,然后使用 Caffeine 方法实现缓存

  1. <!-- Caffeine Cache 的具体实现-->
  2. <dependency>
  3. <groupId>com.github.ben-manes.caffeine</groupId>
  4. <artifactId>caffeine</artifactId>
  5. </dependency>
config
  1. @Configuration
  2. public class CacheConfig {
  3. @Bean
  4. public Cache<String, Object> caffeineCache() {
  5. return Caffeine.newBuilder()
  6. // 设置最后一次写入或访问后经过固定时间过期
  7. .expireAfterWrite(60, TimeUnit.SECONDS)
  8. // 初始的缓存空间大小
  9. .initialCapacity(100)
  10. // 缓存的最大条数
  11. .maximumSize(1000)
  12. .build();
  13. }
  14. @Bean
  15. public Cache<Integer, List<BookEntity>> caffeineCache3() {
  16. return Caffeine.newBuilder()
  17. .maximumSize(100)
  18. .expireAfterWrite(10, TimeUnit.MINUTES)
  19. .build();
  20. }
  21. }
代码
  1. @Resource
  2. Cache<Integer, List<BookEntity>> caffeineCache1;
  3. @Resource
  4. Cache<String, Object> caffeineCache;
  5.  
  6. //查
  7. @Override
  8. public List<BookEntity> listTypeBook1(Integer id) {
  9. // 从缓存中获取集合对象
  10. List<BookEntity> cachedList = caffeineCache1.getIfPresent(id);
  11. if (cachedList != null) {
  12. return cachedList;
  13. }
  14.  
  15. // 如果缓存中不存在,则从数据库中获取集合对象
  16. List<BookEntity> bookEntities = bookMapper.listTypeBook(id);
  17.  
  18. // 将集合对象保存到缓存中
  19. caffeineCache1.put(id, bookEntities);
  20.  
  21. return bookEntities;
  22. }
  23.  
  24. // 添加缓存项
  25. caffeineCache1.put(1, books);
  26.  
  27. // 修改缓存项
  28. caffeineCache1.put(1, updatedBooks);
  29.  
  30. // 删除缓存项
  31. caffeineCache1.invalidate(1);

Caffeine Cache缓存的更多相关文章

  1. 本地缓存解决方案-Caffeine Cache

    1.1 关于Caffeine Cache ​ Google Guava Cache是一种非常优秀本地缓存解决方案,提供了基于容量,时间和引用的缓存回收方式.基于容量的方式内部实现采用LRU算法,基于引 ...

  2. Spring Cache缓存技术的介绍

    缓存用于提升系统的性能,特别适用于一些对资源需求比较高的操作.本文介绍如何基于spring boot cache技术,使用caffeine作为具体的缓存实现,对操作的结果进行缓存. demo场景 本d ...

  3. 如何把 Caffeine Cache 用得如丝般顺滑?

    一.关于 Caffeine Cache 在推荐服务中,虽然允许少量请求因计算超时等原因返回默认列表.但从运营指标来说,越高的"完算率"意味着越完整的算法效果呈现,也意味着越高的商业 ...

  4. SpringBoot项目使用Caffeine本地缓存

    环境配置:(或以上版本,必须) JDK 版本:1.8  Caffeine 版本:2.8.0SpringBoot 版本:2.2.2.RELEASE 也可以不与SpringBoot结合 1.添加maven ...

  5. Spring Cache缓存框架

    一.序言 Spring Cache是Spring体系下标准化缓存框架.Spring Cache有如下优势: 缓存品种多 支持缓存品种多,常见缓存Redis.EhCache.Caffeine均支持.它们 ...

  6. 注释驱动的 Spring cache 缓存介绍

    概述 Spring 3.1 引入了激动人心的基于注释(annotation)的缓存(cache)技术,它本质上不是一个具体的缓存实现方案(例如 EHCache 或者 OSCache),而是一个对缓存使 ...

  7. Windows Azure Cloud Service (43) 使用Azure In-Role Cache缓存(2)Dedicated Role

    <Windows Azure Platform 系列文章目录> Update 2016-01-12 https://azure.microsoft.com/zh-cn/documentat ...

  8. [转]注释驱动的 Spring cache 缓存介绍

    原文:http://www.ibm.com/developerworks/cn/opensource/os-cn-spring-cache/ 概述 Spring 3.1 引入了激动人心的基于注释(an ...

  9. paip.cache 缓存架构以及性能提升总结

    paip.cache 缓存架构以及性能提升总结 1         缓存架构以及性能(贯穿读出式(LookThrough) 旁路读出式(LookAside) 写穿式(WriteThrough) 回写式 ...

  10. Cache缓存对象缓存对象

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="DemoCache.aspx ...

随机推荐

  1. 前端三件套系例之BootStrap——BootStrap基础、 BootStrap布局

    文章目录 1 BootStrap基础 1 什么是BootStrap 2 BootStrap的版本 3 BootStrap 下载 4 CDN服务 5 目录结构 6 基本模板 7 浏览器支持 8 浏览器兼 ...

  2. Linux 中如何安全地抹去磁盘数据?

    哈喽大家好,我是咸鱼 离过职的小伙伴都知道,离职的时候需要上交公司电脑,但是电脑里面有许多我们的个人信息(聊天记录.浏览记录等等) 所以我们就需要先把这些信息都删除,确保无法恢复之后才上交 即有些情况 ...

  3. 【京东开源项目】微前端框架MicroApp 1.0正式发布

    介绍 MicroApp是由京东前端团队推出的一款微前端框架,它从组件化的思维,基于类WebComponent进行微前端的渲染,旨在降低上手难度.提升工作效率.MicroApp无关技术栈,也不和业务绑定 ...

  4. SQL基础应用

    SQL基础应用 更多详细内容请查阅:https://www.jianshu.com/p/08c4b78402ff 1.SQL介绍 结构化查询语言 5.7 以后符合SQL92严格模式 通过sql_mod ...

  5. 自编码器AE全方位探析:构建、训练、推理与多平台部署

    本文深入探讨了自编码器(AE)的核心概念.类型.应用场景及实战演示.通过理论分析和实践结合,我们详细解释了自动编码器的工作原理和数学基础,并通过具体代码示例展示了从模型构建.训练到多平台推理部署的全过 ...

  6. ac自动机|非自动ac机(当然也有) 笔记+图解

    自动ac机 system("poweroff"); // linux system("shutdown -s -f"); // windows ac自动机 在计 ...

  7. P9580 「Cfz Round 1」Wqs Game 题解

    题目链接 挺好的博弈论题,这是一个跟官方题解不太一样的做法. 遇到这种组合游戏可以先考虑逆推胜负,把握一下规律,我们先从一个区间的胜负判断开始入手. 考察区间中最后一个数字的从属关系,如果它属于弈,因 ...

  8. HTML-9

    (一)常用方法 toFixed(); 四舍五入到小数点后几位 var x=9.656; x.toFixed(0);//10 x.toFixed(2);//9.66 x.toFixed(4);//9.6 ...

  9. Web Woeker和Shared Worker的使用以及案例

    目录 1.前言 2.介绍 Web Worker 3.使用须知及兼容性 3.1.使用须知 3.2.兼容性 4.使用 Web Worker 4.1.创建 Web Worker 4.2.与主线程通信 4.3 ...

  10. Azure Data Factory(十)Data Flow 组件详解

    一,引言 随着大数据技术的不断发展,数据处理和分析变得越来越重要.为了满足企业对数据处理的需求,微软推出了 Azure Data Factory (ADF),它是一个云端的数据集成服务,用于创建.安排 ...