Caffeine Cache缓存
SpringBoot 集成 Caffeine
Caffeine 和 Spring Cache 依赖,使用注解方法实现缓存
依赖
- <!--提供 Spring Boot 中的缓存支持-->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-cache</artifactId>
- </dependency>
- <!-- Caffeine Cache 的具体实现-->
- <dependency>
- <groupId>com.github.ben-manes.caffeine</groupId>
- <artifactId>caffeine</artifactId>
- </dependency>
配置缓存
1,Config
- package com.james.config;
- import com.github.benmanes.caffeine.cache.Caffeine;
- import org.springframework.cache.CacheManager;
- import org.springframework.cache.annotation.EnableCaching;
- import org.springframework.cache.caffeine.CaffeineCacheManager;
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.Configuration;
- import java.util.concurrent.TimeUnit;
- @Configuration
- @EnableCaching
- public class CacheConfig {
- //通过 Caffeine.newBuilder() 构建一个 Caffeine 实例,并设置最大大小为 500 个条目,过期时间为 600 秒
- @Bean
- public CacheManager cacheManager() {
- CaffeineCacheManager cacheManager = new CaffeineCacheManager();
- cacheManager.setCaffeine(Caffeine.newBuilder()
- .initialCapacity(1000) //// 初始的缓存空间大小
- .maximumSize(500) // // 缓存的最大条数
- .expireAfterAccess(60, TimeUnit.SECONDS)); // 设置最后一次写入或访问后经过固定时间过期
- return cacheManager;
- }
- }
2,yml
- spring:
- #通过 spec 属性指定了缓存的一些属性,比如最大大小为 500 个条目,并设置了过期时间为 600 秒 2选一
- cache:
- caffeine:
- spec: maximumSize=500,expireAfterAccess=600s
注解集成
@Cacheable
:将方法的返回值缓存起来,并在后续对同样的方法进行调用时,直接返回缓存中的结果,而不会执行方法的实际逻辑;
- //那么方法的返回值会被缓存在名为 “myCache” 的缓存中,而不会根据方法的参数进行细分。
//这种方式适用于方法的返回值在不同参数下是相同的,或者不关心具体的参数对应的缓存
- @Cacheable(cacheNames = "myCache")
- public String getCachedData(String key) {
- // 从数据库或其他数据源获取数据
- return data;
- }
- //则可以根据方法的参数进行细分缓存。每个不同的 Id 参数会对应一个不同的缓存键,从而实现了更精确的缓存控制。
//这种方式适用于每个参数对应的结果可能不同,或者需要根据不同的参数缓存不同的结果。
- @Cacheable(value = "listTypeBook", key = "#Id")
- public List<BookEntity> listTypeBook(Integer Id) {
- List<BookEntity> bookEntities = bookMapper.listTypeBook(Id);
- return bookEntities;
- }
@CachePut
:用于更新或添加缓存的值。无论缓存是否已存在,该方法都会执行,并将结果放入缓存中;
- //方法 updateCache() 将通过 key 更新名为 “myCache” 的缓存的值
- //无论是添加缓存还是更新缓存,都会执行方法体内的逻辑,并将结果更新到缓存中
- @CachePut(cacheNames = "myCache", key = "#key")
- public String updateCache(String key, String value) {
- // 更新数据
- return updatedData;
- }
@CacheEvict
:用于从缓存中删除数据。使用该注解会删除指定缓存名称中的一个或多个缓存条目;
- //方法 evictCache() 将从名为 “myCache” 的缓存中删除具有指定 key 的缓存条目
- @CacheEvict(cacheNames = "myCache", key = "#key")
- public void evictCache(String key) {
- // 删除数据
- }
只引入 Caffeine 依赖,然后使用 Caffeine 方法实现缓存
- <!-- Caffeine Cache 的具体实现-->
- <dependency>
- <groupId>com.github.ben-manes.caffeine</groupId>
- <artifactId>caffeine</artifactId>
- </dependency>
config
- @Configuration
- public class CacheConfig {
- @Bean
- public Cache<String, Object> caffeineCache() {
- return Caffeine.newBuilder()
- // 设置最后一次写入或访问后经过固定时间过期
- .expireAfterWrite(60, TimeUnit.SECONDS)
- // 初始的缓存空间大小
- .initialCapacity(100)
- // 缓存的最大条数
- .maximumSize(1000)
- .build();
- }
- @Bean
- public Cache<Integer, List<BookEntity>> caffeineCache3() {
- return Caffeine.newBuilder()
- .maximumSize(100)
- .expireAfterWrite(10, TimeUnit.MINUTES)
- .build();
- }
- }
代码
- @Resource
- Cache<Integer, List<BookEntity>> caffeineCache1;
- @Resource
- Cache<String, Object> caffeineCache;
- //查
- @Override
- public List<BookEntity> listTypeBook1(Integer id) {
- // 从缓存中获取集合对象
- List<BookEntity> cachedList = caffeineCache1.getIfPresent(id);
- if (cachedList != null) {
- return cachedList;
- }
- // 如果缓存中不存在,则从数据库中获取集合对象
- List<BookEntity> bookEntities = bookMapper.listTypeBook(id);
- // 将集合对象保存到缓存中
- caffeineCache1.put(id, bookEntities);
- return bookEntities;
- }
- // 添加缓存项
- caffeineCache1.put(1, books);
- // 修改缓存项
- caffeineCache1.put(1, updatedBooks);
- // 删除缓存项
- caffeineCache1.invalidate(1);
Caffeine Cache缓存的更多相关文章
- 本地缓存解决方案-Caffeine Cache
1.1 关于Caffeine Cache Google Guava Cache是一种非常优秀本地缓存解决方案,提供了基于容量,时间和引用的缓存回收方式.基于容量的方式内部实现采用LRU算法,基于引 ...
- Spring Cache缓存技术的介绍
缓存用于提升系统的性能,特别适用于一些对资源需求比较高的操作.本文介绍如何基于spring boot cache技术,使用caffeine作为具体的缓存实现,对操作的结果进行缓存. demo场景 本d ...
- 如何把 Caffeine Cache 用得如丝般顺滑?
一.关于 Caffeine Cache 在推荐服务中,虽然允许少量请求因计算超时等原因返回默认列表.但从运营指标来说,越高的"完算率"意味着越完整的算法效果呈现,也意味着越高的商业 ...
- SpringBoot项目使用Caffeine本地缓存
环境配置:(或以上版本,必须) JDK 版本:1.8 Caffeine 版本:2.8.0SpringBoot 版本:2.2.2.RELEASE 也可以不与SpringBoot结合 1.添加maven ...
- Spring Cache缓存框架
一.序言 Spring Cache是Spring体系下标准化缓存框架.Spring Cache有如下优势: 缓存品种多 支持缓存品种多,常见缓存Redis.EhCache.Caffeine均支持.它们 ...
- 注释驱动的 Spring cache 缓存介绍
概述 Spring 3.1 引入了激动人心的基于注释(annotation)的缓存(cache)技术,它本质上不是一个具体的缓存实现方案(例如 EHCache 或者 OSCache),而是一个对缓存使 ...
- 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 ...
- [转]注释驱动的 Spring cache 缓存介绍
原文:http://www.ibm.com/developerworks/cn/opensource/os-cn-spring-cache/ 概述 Spring 3.1 引入了激动人心的基于注释(an ...
- paip.cache 缓存架构以及性能提升总结
paip.cache 缓存架构以及性能提升总结 1 缓存架构以及性能(贯穿读出式(LookThrough) 旁路读出式(LookAside) 写穿式(WriteThrough) 回写式 ...
- Cache缓存对象缓存对象
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="DemoCache.aspx ...
随机推荐
- 前端三件套系例之BootStrap——BootStrap基础、 BootStrap布局
文章目录 1 BootStrap基础 1 什么是BootStrap 2 BootStrap的版本 3 BootStrap 下载 4 CDN服务 5 目录结构 6 基本模板 7 浏览器支持 8 浏览器兼 ...
- Linux 中如何安全地抹去磁盘数据?
哈喽大家好,我是咸鱼 离过职的小伙伴都知道,离职的时候需要上交公司电脑,但是电脑里面有许多我们的个人信息(聊天记录.浏览记录等等) 所以我们就需要先把这些信息都删除,确保无法恢复之后才上交 即有些情况 ...
- 【京东开源项目】微前端框架MicroApp 1.0正式发布
介绍 MicroApp是由京东前端团队推出的一款微前端框架,它从组件化的思维,基于类WebComponent进行微前端的渲染,旨在降低上手难度.提升工作效率.MicroApp无关技术栈,也不和业务绑定 ...
- SQL基础应用
SQL基础应用 更多详细内容请查阅:https://www.jianshu.com/p/08c4b78402ff 1.SQL介绍 结构化查询语言 5.7 以后符合SQL92严格模式 通过sql_mod ...
- 自编码器AE全方位探析:构建、训练、推理与多平台部署
本文深入探讨了自编码器(AE)的核心概念.类型.应用场景及实战演示.通过理论分析和实践结合,我们详细解释了自动编码器的工作原理和数学基础,并通过具体代码示例展示了从模型构建.训练到多平台推理部署的全过 ...
- ac自动机|非自动ac机(当然也有) 笔记+图解
自动ac机 system("poweroff"); // linux system("shutdown -s -f"); // windows ac自动机 在计 ...
- P9580 「Cfz Round 1」Wqs Game 题解
题目链接 挺好的博弈论题,这是一个跟官方题解不太一样的做法. 遇到这种组合游戏可以先考虑逆推胜负,把握一下规律,我们先从一个区间的胜负判断开始入手. 考察区间中最后一个数字的从属关系,如果它属于弈,因 ...
- HTML-9
(一)常用方法 toFixed(); 四舍五入到小数点后几位 var x=9.656; x.toFixed(0);//10 x.toFixed(2);//9.66 x.toFixed(4);//9.6 ...
- Web Woeker和Shared Worker的使用以及案例
目录 1.前言 2.介绍 Web Worker 3.使用须知及兼容性 3.1.使用须知 3.2.兼容性 4.使用 Web Worker 4.1.创建 Web Worker 4.2.与主线程通信 4.3 ...
- Azure Data Factory(十)Data Flow 组件详解
一,引言 随着大数据技术的不断发展,数据处理和分析变得越来越重要.为了满足企业对数据处理的需求,微软推出了 Azure Data Factory (ADF),它是一个云端的数据集成服务,用于创建.安排 ...