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 ...
随机推荐
- DHCP和PXE是怎么工作的
dhcp(Dynamic Host Configuration Protocol):配置一段共享IP地址,为新上线的机器分配IP地址,回收下线机器的IP地址. 正常情况下主机(DHCP client) ...
- ubuntu 20.1 (linux) 下软件安装教程(基本上都是使用命令行安装)
一.node 1. 安装教程 # 第二步,添加源后安装 需要什么版本直接替换后面的数字即可,如果需要21,直接将20替换为21就可以了 curl -sL https://deb.nodesource. ...
- 网络基础-OSI七层vsTCP/UDP四层 五层 数据封装
1.0 网络基础 1.1 网络是什么? 网络是信息传输.接收.共享的虚拟平台,通过它把各个点.面.体的信息联系到一起,从而实现这些资源的共享 网络分类:局域网 ,城域网,广域网 1.2 数据通信方式 ...
- CSP-2023 初赛游记
9.16 上午 今天就不早读了. 去前做了个 2019 的题,60 多分,感觉挺危. 去比赛前 30min 发现没带身份证,去宿舍拿的. 前 10min 发现没有笔,借了一些,但是发现还有一个小时才开 ...
- 解决使用mitmprox抓包可以访问网页,但是使用python request 调用该网站接口报错问题
可能有几种原因导致这种情况.以下是一些常见的问题和可能的解决方法: 证书验证问题: 当你使用mitmproxy抓包时,它通常会生成自签名的SSL证书,以便进行中间人攻击检查.但在Python中使用re ...
- sql server 截断和收缩所有用户数据库日志--用游标循环所有正常状态的用户数据库
在服务器运维活动中,我们经常需要做一项工具就是将好多年的用户数据库日志文件截断并收缩为最小,以节省大量的磁盘空间.当数据库只有一两个时可以手动操作,但数据库数量众多时,就需要采用sql脚本,批量化执行 ...
- 7/10 luoguRound 10 庆典 div3T1
#include<bits/stdc++.h> using namespace std; int m,n,x; int arr[100005]; int maxi = -1,maxn = ...
- JavaScript高级程序设计笔记12 BOM
BOM BOM的核心--window对象 窗口和弹窗 location对象--页面信息 navigator对象--浏览器信息 history对象--浏览器历史记录 BOM是使用JavaScript开发 ...
- 五分钟k8s实战-Istio 网关
在上一期 k8s-服务网格实战-配置 Mesh 中讲解了如何配置集群内的 Mesh 请求,Istio 同样也可以处理集群外部流量,也就是我们常见的网关. 其实和之前讲到的k8s入门到实战-使用Ingr ...
- Basic concepts of complex number
目录 虚数的引入 复数和虚数的关系 Example - 分辨一个数 判断两个复数是否相等的条件 共轭复数 复数的几何意义.复平面的认识 求复数的模 Reference 虚数的引入 假设有一个数,可以叫 ...