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

springboot缓存篇之内置缓存

前言

前面我们讲了mybatis的一级缓存和二级缓存,这种缓存是基于持久层的缓存,存在很大的局限性。这篇文章主要分享一下另外的一种缓存方式,springboot的内置缓存,看看内置缓存的用法和它的优劣。

开启缓存

在使用springboot的内置缓存之前必须做以下两个步骤:

引入依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId>
</dependency>

开启缓存

在启动文件加上@EnableCaching注解即可

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

缓存注解

@Cacheable

两个重要的属性 :value和key

其中key指定的是数据在缓存中存储的键,value是只要使用的缓存名称

作用:在方法执行前 Spring 先查看缓存中是否有数据,若有,则直接返回缓存数据:若无数据,则调用方法将方法返回值放入缓存中。

例子:

@Override
@Cacheable(value = "goods-info", key = "#id")
public Goods info(Long id) {log.info("从数据库获取");return goodsMapper.selectByPrimaryKey(id);
}

看控制台日志可以发现,只有第一次会打印"从数据库获取",后续运行接口就直接从缓存中拿,不会再执行方法里面的内容了。

@CachePut

同样的该方法也是有两个重要属性:value和key

作用:将方法返回值放入缓存中

它并不像@Cacheable一样,需要查是否存在缓存,它是直接设置缓存,一般是在新增或更新缓存的时候用到。

例子:

@CachePut`(value = "goods-info", key = "#id")
public Goods update(Goods goods){goodsMapper.updateByPrimaryKeySelective(goods);return goods;
}

@CacheEvict

它的一个重要属性:key,跟上面两个注解的key是一样的意思

作用:删除缓存

例子:

@CacheEvict(value = "order-info", key = "#id")
public void delete(Long id){Goods goods = new Goods();goods.setId(id);goods.setDeleted(0);goodsMapper.updateByPrimaryKeySelective(goods);
}

@Caching

作用:可以通过 @Caching 注解组合多个注解策略在一个方法上.

这个也不难理解,比如说我们在一个方法里面,生成了订单的同时清空了购物车,订单是要缓存的,而购物车是需要清空的,这时是不是要一个组合?

此时我们可以在方法是加上这个注解

@Caching(cacheable = {@Cacheable(value = "order-info", key = "#id")},evict = {@CacheEvict(value = "cart-info", key = "#id")}
)

总结

springboot 的内置缓存使用注解的方式非常简单,它是把数据保存在内存中,因此它的效率非常高,但它同样面临一个问题就是无法在分布式环境中使用。就如之前分享的那篇文章《mybatis的一级缓存和二级缓存》一样,如果存在多个节点,缓存更新的只是当前的节点而不是所有的节点。

相关文章:

springboot缓存篇之内置缓存

前言 前面我们讲了mybatis的一级缓存和二级缓存&#xff0c;这种缓存是基于持久层的缓存&#xff0c;存在很大的局限性。这篇文章主要分享一下另外的一种缓存方式&#xff0c;springboot的内置缓存&#xff0c;看看内置缓存的用法和它的优劣。 开启缓存 在使用springboot的内…...

微信小程序开发之投票管理及小程序UI的使用

目录 一、小程序UI 1.讲述 2. 介绍vantWeapp 3. 使用vantWeapp 安装 构建 依赖 引用 二、后端 1. 后端实体对象 2. 后端接口 3. 实现类 4. 请求处理类 三、前端 1. 定义路径 2. 页面引用 3. 页面 4. 页面美化 5. 数据 6. 效果展示 一、小程序UI 1.讲述 小…...

EPB功能开发与测试(基于ModelBase实现)

ModelBase是经纬恒润开发的车辆仿真软件&#xff0c;包含两个大版本&#xff1a;动力学版本、智能驾驶版本。动力学版包含高精度动力学模型&#xff0c;能很好地复现车辆在实际道路中运行的各种状态变化&#xff0c;可用于乘用车、商用车动力底盘系统算法开发、控制器仿真测试&…...

微信小程序:点击按钮出现右侧弹窗

效果 代码 wxml <!-- 弹窗信息 --> <view class"popup-container" wx:if"{{showPopup}}"><view class"popup-content"><!-- 弹窗内容 --><text>这是一个右侧弹窗</text></view> </view> <…...

EEG脑电信号的具体采集过程

脑电图&#xff08;EEG&#xff09;是一种记录大脑活动的非侵入性方法。下面是EEG脑电信号的典型采集过程&#xff1a; 准备&#xff1a;在进行EEG采集之前&#xff0c;需要准备好以下设备和材料&#xff1a; EEG采集设备&#xff1a;包括EEG电极、放大器和记录设备。电极帽或电…...

SYS/BIOS 开发教程: 创建自定义平台

目录 SYS/BIOS 开发教程: 创建自定义平台创建自定义平台新建工程并指定自定义平台修改现有工程使用自定义平台 参考: TI SYS/BIOS v6.35 Real-time Operating System User’s Guide 6.2节 本示例基于 EVMC6678L 开发板, 创建自定义平台, 并将代码段的位置指定到C6678器件内部的…...

【Qt样式(qss)-5】qss局部渲染混乱,错乱,不生效的一种原因

前言&#xff1a; 之前写过一些关于qss的文章&#xff1a; 【Qt样式&#xff08;qss&#xff09;-1】手册小结&#xff08;附例&#xff1a;软件深色模式&#xff09;_深蓝色主题qss表-CSDN博客 【Qt样式&#xff08;qss&#xff09;-2】使用小结&#xff08;软件换肤&#…...

最新基于机器学习模型单图换脸离线版软件包及使用方法,本地离线版本模型一键运行(免费下载)

最新基于机器学习模型单图换脸离线版软件包及使用方法,本地离线版本模型一键运行(免费下载)。 “单图换脸”离线一键运行版来了。Roop发布几十个小时后,马不停蹄地搞了Colab在线版。其实这东西都挺好的,又快又方便,几乎没有任何硬件要求,点一点就可以搞定了。但是它有…...

通过VScode连接远程 Linux 服务器修改vue代码

1先在Linux环境安装node&#xff0c;官网下载的node安装包放在自己新建文件夹 2解压 tar -zxvf node-v18.18.0-linux-x64.tar.xz 3新建代码路径&#xff0c; 下载代码 4安装 OpenSSH OpenSSH 可以让你在终端使用 ssh 命令&#xff0c;Windows10 一般自带。 可以通过以下方式…...

Pytorch实现深度学习常见问题

RuntimeError: stack expects each tensor to be equal size, but got [3, 300, 300] at entry 0 and [3, 301, 301] at entry 24 这里的问题出现的原因肯定是在数据预处理处&#xff0c;如下图&#xff0c;当数据使用不同的transforms处理方式时&#xff0c;会导致数据的尺寸大…...

ICMP权限许可和访问控制漏洞处理(CVE-1999-0524)

一、问题描述 某次例行安全扫描&#xff0c;发现&#xff1a;ICMP权限许可和访问控制漏洞&#xff0c;编号&#xff1a;CVE-1999-0524&#xff0c;危险级别&#xff1a;低风险。利用该漏洞&#xff0c;远程主机会回复ICMP_TIMESTAMP查询并返回它们系统的当前时间&#xff0c;I…...

Java生成优惠券兑换码并确保唯一性最终添加到数据库

1.使用随机数生成器或其他生成唯一标识符的算法来生成兑换码。 2.创建一个 HashSet 或其他适合存储兑换码的数据结构来确保唯一性。每次生成一个兑换码时&#xff0c;先检查它是否已经存在于 HashSet 中&#xff0c;如果存在则重新生成直到生成一个新的唯一兑换码。 3.循环调…...

【Linux/脚本/芯片学习】Perl学习

Title&#xff1a;Perl学习 个人学习策略 主用python. 看懂perl 和 tcl 即可。 之前的存货 开始搬砖后&#xff0c;整理 ”网络发布版笔记“ 的心思寡淡了好多&#xff0c;可能就是被工作榨干的原因8… 但今天至少得赶个1024节日… (&#xffe3;▽&#xffe3;)"~ 1 介…...

嵌入式实时操作系统的设计与开发(信号量学习)

信号量 除了临界点机制、互斥量机制可实现临界资源的互斥访问外&#xff0c;信号量&#xff08;Semaphore&#xff09;是另一选择。 信号量与互斥量的区别 对于互斥量来说&#xff0c;主要应用于临界资源的互斥访问&#xff0c;并且能够有效地避免优先级反转问题。对于信号量…...

python环境安装教程

Python是一种流行的高级编程语言&#xff0c;它简单易学、功能强大&#xff0c;适用于各种应用领域&#xff0c;从Web开发到数据科学和人工智能。在本教程中&#xff0c;我将向您介绍如何安装Python并设置您的开发环境。请注意&#xff0c;以下步骤适用于Windows操作系统。 步…...

【学习笔记】CF1784F Minimums or Medians

首先让 n n n乘上 2 2 2。 考虑枚举最终被删除的位置有哪些。 a i 0 a_i0 ai​0表示这个位置被删除&#xff0c; a i 1 a_i1 ai​1表示这个位置被保留&#xff0c;设满足 a i 0 a_i0 ai​0的前缀长度为 l l l&#xff08; l l l是偶数&#xff09;&#xff0c; p r e i pre…...

如何系列 如何玩转远程调用之OpenFegin+SpringBoot(非Cloud)

文章目录 简介原生Fegin示例基础契约日志重试编码器/解码器自定义解码器 请求拦截器响应拦截器表单文件上传支持错误解码器断路器指标metrics客户端 配合SpringBoot&#xff08;阶段一&#xff09;配合SpringBoot&#xff08;阶段二&#xff09;1.EnableLakerFeignClients2.Lak…...

Python学习第2天-安装pycharm

文章目录 前言一、下载二、安装1.选择安装目录2.安装配置 总结 前言 好用的工具可以极大地提高生产力&#xff0c;开发Python推荐使用jetbrains全家桶的pycharm。 一、下载 通过官网下载安装包。 二、安装 1.选择安装目录 2.安装配置 一路Next&#xff0c;安装完成 总结 …...

等电位连接器行业应用综合方案

等电位连接器的原理 等电位连接器的原理是利用气体放电管或压敏电阻等非线性元件&#xff0c;当连接器两端的电位差大于所限峰值电压时&#xff0c;连接器导通&#xff0c;迫使连接器两端不同接地体电位基本相等&#xff0c;消除接地体间放电现象&#xff0c;从而避免了由于地…...

内裤洗衣机有用吗?最好用的四款内衣洗衣机测评

相信很多小伙伴往往会因为懒而不想洗内衣&#xff0c;又或者洗内衣时经常会洗不干净&#xff01;这时就很有必要入手一台内衣洗衣机了&#xff0c;当我们洗完澡时&#xff0c;顺手把内衣放入洗衣机内&#xff0c;一键启动即可把我们的内衣洗得干干净净&#xff01;同时还可以为…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明&#xff1a; 想象一下&#xff0c;你正在用eNSP搭建一个虚拟的网络世界&#xff0c;里面有虚拟的路由器、交换机、电脑&#xff08;PC&#xff09;等等。这些设备都在你的电脑里面“运行”&#xff0c;它们之间可以互相通信&#xff0c;就像一个封闭的小王国。 但是&#…...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建 API&#xff0c;支持 Python 3.6。它基于标准 Python 类型提示&#xff0c;易于学习且功能强大。以下是一个完整的 FastAPI 入门教程&#xff0c;涵盖从环境搭建到创建并运行一个简单的…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡&#xff0c;轻快的音乐在耳边持续回荡&#xff0c;小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下&#xff0c;六一来了。 今天是六一儿童节&#xff0c;小蓝老师为了让大家在节…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的&#xff0c;根据Excel列的需求预估的工时直接打骨折&#xff0c;不要问我为什么&#xff0c;主要…...

postgresql|数据库|只读用户的创建和删除(备忘)

CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...

云原生玩法三问:构建自定义开发环境

云原生玩法三问&#xff1a;构建自定义开发环境 引言 临时运维一个古董项目&#xff0c;无文档&#xff0c;无环境&#xff0c;无交接人&#xff0c;俗称三无。 运行设备的环境老&#xff0c;本地环境版本高&#xff0c;ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用&#xff0c;结合SQLite数据库实现联系人管理功能&#xff0c;并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能&#xff0c;同时可以最小化到系统…...