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

Spring Boot整合Redis缓存并使用注解

Spring Boot整合Redis缓存并使用注解

在Spring Boot应用程序中,您可以使用Spring Cache库与Redis缓存进行集成,以提高应用程序的性能和响应速度。Spring Cache库提供了一组注解,包括@Cacheable@CachePut@CacheEvict,可以方便地将方法的返回值缓存到Redis中,并根据需要进行刷新和清除。

本篇博客将向您展示如何在Spring Boot项目中整合Redis缓存,并使用注解来管理缓存操作。

步骤1:添加依赖项

首先,在您的Spring Boot项目的pom.xml文件中添加必要的依赖项以使用Redis和Spring Cache:

<dependencies><!-- 其他依赖项 --><!-- Redis依赖项 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><!-- Spring Cache依赖项 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId></dependency>
</dependencies>

步骤2:配置Redis连接

接下来,您需要在application.propertiesapplication.yml配置文件中添加Redis连接的相关配置信息:

spring.redis.host=your-redis-host
spring.redis.port=your-redis-port
spring.redis.password=your-redis-password (如果有密码)

步骤3:启用缓存和Redis支持

在您的Spring Boot应用程序主类上添加@EnableCaching注解,以启用缓存支持:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;@SpringBootApplication
@EnableCaching
public class YourApplication {public static void main(String[] args) {SpringApplication.run(YourApplication.class, args);}}

步骤4:在方法上使用缓存注解

现在,您可以在需要缓存的方法上使用@Cacheable@CachePut@CacheEvict注解。

@Cacheable

@Cacheable注解用于缓存方法的返回值,并在后续调用时从缓存中获取结果,而不再执行实际的方法体。

示例:

import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;@Service
public class YourService {@Cacheable("books")public Book findBookById(String id) {// 从数据库或其他数据源获取书籍信息return book;}}

在上述示例中,findBookById方法的返回值将被缓存到名为"books"的缓存中。当再次调用该方法时,将从缓存中获取结果,而不会执行方法体。

@CachePut

@CachePut注解用于将方法的返回值存储到缓存中,类似于@Cacheable注解,但它每次都会执行方法体。

示例:

import org.springframework.cache.annotation.CachePut;
import org.springframework.stereotype.Service;@Service
public class YourService {@CachePut("books")public Book updateBook(Book book) {// 更新数据库或其他数据源中的书籍信息return book;}}

在上述示例中,每次调用updateBook方法时,都会执行方法体,并将返回的书籍信息存储到名为"books"的缓存中。

@CacheEvict

@CacheEvict注解用于从缓存中移除指定的条目,可以在方法调用之前、之后或同时触发。

示例:

import org.springframework.cache.annotation.CacheEvict;
import org.springframework.stereotype.Service;@Service
public class YourService {@CacheEvict("books")public void deleteBook(String id) {// 从数据库或其他数据源中删除书籍信息}}

在上述示例中,每次调用deleteBook方法时,都会从名为"books"的缓存中移除相应的条目。

步骤5:使用缓存注解进行方法缓存

在步骤4中,我们已经介绍了@Cacheable@CachePut@CacheEvict注解的基本用法。现在,让我们更详细地了解这些注解的使用方法。

@Cacheable

@Cacheable注解可用于方法级别,用于指定方法的返回值应该被缓存起来。可以使用value属性指定要使用的缓存名称,还可以使用key属性来定义缓存的键。

示例:

import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;@Service
public class YourService {@Cacheable(value = "books", key = "#id")public Book findBookById(String id) {// 从数据库或其他数据源获取书籍信息return book;}}

在上述示例中,findBookById方法的返回值将被缓存到名为"books"的缓存中,并且使用id作为缓存的键。

@CachePut

@CachePut注解可用于方法级别,用于将方法的返回值存储到缓存中。与@Cacheable注解不同的是,@CachePut注解每次都会执行方法体。

示例:

import org.springframework.cache.annotation.CachePut;
import org.springframework.stereotype.Service;@Service
public class YourService {@CachePut(value = "books", key = "#book.id")public Book updateBook(Book book) {// 更新数据库或其他数据源中的书籍信息return book;}}

在上述示例中,每次调用updateBook方法时,都会执行方法体,并将返回的书籍信息存储到名为"books"的缓存中,使用book.id作为缓存的键。

@CacheEvict

@CacheEvict注解可用于方法级别,用于从缓存中移除指定的条目。可以使用value属性指定要清除的缓存名称,还可以使用key属性来定义要清除的缓存键。

示例:

import org.springframework.cache.annotation.CacheEvict;
import org.springframework.stereotype.Service;@Service
public class YourService {@CacheEvict(value = "books", key = "#id")public void deleteBook(String id) {// 从数据库或其他数据源中删除书籍信息}}

在上述示例中,每次调用deleteBook方法时,将从名为"books"的缓存中移除具有给定id的条目。

结论

通过使用@Cacheable@CachePut@CacheEvict注解,您可以方便地使用Redis缓存来提高Spring Boot应用程序的性能和响应速度。这些注解使得方法的结果可以被缓存、更新或清除,从而减少对后端资源的访问。

希望

本篇博客对您有所帮助!如果您想深入了解更多关于Spring Boot和Redis缓存的内容,建议您查阅官方文档和其他相关资源。

参考链接:

  • Spring Boot官方文档
  • Spring Framework官方文档 - Caching

相关文章:

Spring Boot整合Redis缓存并使用注解

Spring Boot整合Redis缓存并使用注解 在Spring Boot应用程序中&#xff0c;您可以使用Spring Cache库与Redis缓存进行集成&#xff0c;以提高应用程序的性能和响应速度。Spring Cache库提供了一组注解&#xff0c;包括Cacheable、CachePut和CacheEvict&#xff0c;可以方便地将…...

通知可以根据切入点表达式来进行增强,也可以根据自己的注解值来进行增强

通知可以根据切入点表达式来进行增强&#xff0c;也可以根据自己的注解值&#xff08;例如 Before、After、Around 等&#xff09;来进行增强。 如果要根据切入点表达式来进行增强&#xff0c;需要在通知注解中使用 Pointcut 注解来引用切入点表达式。例如&#xff0c;在以下示…...

<Python实际应用>做一个简单的签到投屏系统

公司接了个活&#xff0c;承办一个由团委组织的五四青年节徒步活动&#xff0c;其中一个环节是现场报名&#xff0c;来的人把名字填进去后随机分组&#xff0c;并显示在现场的LED大屏幕上&#xff0c;我自告奋勇用Python来开发这个小程序。这里记录一下 【项目需求】 1、报名…...

时序预测 | MATLAB实现BO-CNN-GRU贝叶斯优化卷积门控循环单元时间序列预测

时序预测 | MATLAB实现BO-CNN-GRU贝叶斯优化卷积门控循环单元时间序列预测 目录 时序预测 | MATLAB实现BO-CNN-GRU贝叶斯优化卷积门控循环单元时间序列预测效果一览基本介绍模型描述程序设计参考资料 效果一览 基本介绍 基于贝叶斯(bayes)优化卷积神经网络-门控循环单元(CNN-GR…...

Baumer工业相机堡盟工业相机使用BGAPISDK将工业相机设为Burst模式以及该模式的优势以及行业应用(C++)

Baumer工业相机堡盟工业相机使用BGAPISDK将工业相机设为Burst模式以及该模式的优势以及行业应用&#xff08;C&#xff09; Baumer工业相机Baumer工业相机的Burst模式的技术背景Baumer工业相机使用BGAPISDK将设置Burst模式1.引用合适的类文件2.使用BGAPI SDK初始化相机设置Burs…...

BERT输入以及权重矩阵形状解析

以下用形状来描述矩阵。对于向量&#xff0c;为了方便理解&#xff0c;也写成了类似(1,64)这种形状的表示形式&#xff0c;这个你理解为64维的向量即可。下面讲的矩阵相乘都是默认的叉乘。 词嵌入矩阵形状&#xff1a;以BERT_BASE为例&#xff0c;我们知道其有12层Encoder&…...

3 个令人惊艳的 ChatGPT 项目,开源了!

过去一周&#xff0c;AI 界又发生了天翻地覆的变化&#xff0c;其中&#xff0c;最广为人知的&#xff0c;应该是 OpenAI 正式上线 ChatGPT iOS 客户端&#xff0c;让所有人都可以更方便的在手机上与 ChatGPT 聊天。 此外&#xff0c;Stable Diffusion 母公司 Stability AI 也…...

一、12.C++内存管理

C++内存管理 28.C++的内存管理 和C基本一致 代码区(Code Segment):也称为文本区,存放程序的可执行代码。 全局区(Global/Static Segment):存放全局变量、静态变量和常量。程序在编译后,分配这些数据的空间。 栈区(Stack Segment):存放函数调用时的参数、返回地…...

ensp实践dhcp服务

ensp实践dhcp服务 1、dhcp接口分配模式2、dhcp接口地址池分配模式3、dhcp布拉布拉布拉 1、dhcp接口分配模式 1.1、路由器AR1配置dhcp动态获取 <Huawei>system-view [Huawei]interface g0/0/0 [Huawei-GigabitEthernet0/0/0]ip address 10.1.1.1 24 [Huawei-GigabitEthe…...

【王道·计算机网络】第六章 应用层

一、基本概念 1.1 应用层概述 应用层对应用程序的通信提供服务应用层协议定义&#xff1a; 应用进程交换的报文类型&#xff0c;请求还是响应?各种报文类型的语法&#xff0c;如报文中的各个字段及其详细描述字段的语义&#xff0c;即包含在字段中的信息的含义进程何时、如何…...

【论文解读】(如何微调BERT?) How to Fine-Tune BERT for Text Classification?

文章目录 论文信息1. 论文内容2. 论文结论2.1 微调流程2.2 微调策略(Fine-Tuning Strategies)2.3 Further Pretrain 3. 论文实验介绍3.1 实验数据集介绍3.2 实验超参数3.3 Fine-Tuning策略探索3.3.1 处理长文本3.3.2 不同层的特征探索3.3.3 学习率探索&#xff08;灾难性遗忘探…...

工程师是怎样对待开源

工程师如何对待开源 本文是笔者作为一个在知名科技企业内从事开源相关工作超过 20 年的工程师&#xff0c;亲身经历或者亲眼目睹很多工程师对待开源软件的优秀实践&#xff0c;也看到了很多 Bad Cases&#xff0c;所以想把自己的一些心得体会写在这里&#xff0c;供工程师进行…...

Spring Boot日志系统大揭秘:从零开始学习Spring Boot日志:常见问题解答和最佳实践

一. 关于 Spring Boot 日志的使用 Spring Boot 日志机制和工具用于记录应用程序的日志信息和追踪应用程序的执行过程。它集成了常用的日志框架&#xff0c;如 Log4j、logback、Java Util Logging等&#xff0c;并提供简单易用的配置方式&#xff0c;让开发人员可以方便地监控应…...

【06】Nginx之反向代理

Nginx反向代理的配置语法 Nginx反向代理模块的指令是由ngx_http_proxy_module模块进行解析 proxy_pass 该指令用来设置被代理服务器地址&#xff0c;可以是主机名称、IP地址加端口号形式。 语法proxy_pass URL;默认值—位置location URL:为要设置的被代理服务器地址&#xf…...

TCP是面向字节流的协议

TCP字节流 之所以会说 TCP 是面向字节流的协议&#xff0c;UDP 是面向报文的协议&#xff0c;是因为操作系统对 TCP 和 UDP 协议的发送方的机制不同&#xff0c;也就是问题原因在发送方。 为什么 UDP 是面向报文的协议&#xff1f; 当用户消息通过 UDP 协议传输时&#xff0c;…...

读书笔记——《when breath becomes air》《超越自卑》

为啥要两本书一起写读后感&#xff1f; 读完这两本书本来应该分开来写点东西的&#xff0c;不过我认为这两本书应该写不了太多内容。虽然我也看了几本英文原著&#xff08;也写了点东西&#xff09;&#xff0c;但是我明显低估了《when breath becomes air》的难度&#xff0c…...

CMD与DOS脚本编程【第二章】

预计更新 第一章. 简介和基础命令 1.1 介绍cmd/dos脚本语言的概念和基本语法 1.2 讲解常用的基础命令和参数&#xff0c;如echo、dir、cd等 第二章. 变量和运算符 2.1 讲解变量和常量的定义和使用方法 2.2 介绍不同类型的运算符和运算规则 第三章. 控制流程和条件语句 3.1 介…...

面试字节,过关斩将直接干到 3 面,结果被吊打了?

人人都有大厂梦&#xff0c;对于软件测试员来说&#xff0c;BAT 为首的一线互联网公司肯定是自己的心仪对象&#xff0c;毕竟能到这些大厂工作&#xff0c;不仅薪资高待遇好&#xff0c;而且能力技术都能够得到提升&#xff0c;最关键的是还能够给自己镀上一层金&#xff0c;让…...

OpenCV在iOS端的集成及Mat和UIImage互相转化(附源码)

OpenCV是一个非常强大的图形处理框架&#xff0c;可以运行在Linux、Windows、Android和Mac OS操作系统上&#xff0c;在自动驾驶、智能家居、人脸识别、图片处理等方面提供了非常丰富且功能强大的api&#xff0c;在图片处理方便&#xff0c;基本上可以满足对图片处理的所有需求…...

5月跳槽会有风险,不跳也会有?

今天讲讲跳槽。 说实话跳槽是为了寻求更好的发展&#xff0c;但在跳槽前我们也不能确定下家就是更好的归宿&#xff0c;这就更加需要我们审慎地去对待&#xff0c;不能盲目跳槽。 其次&#xff0c;我们离职和跳槽&#xff0c;其中的原因很大一部分是目前薪资不符合预期。 那…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端&#xff0c;同时完善学生端的构建。本次工作主要包括&#xff1a; 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils&#xff1a; ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类&#xff0c;封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz&#xff0c;先构建任务的 JobD…...

基于当前项目通过npm包形式暴露公共组件

1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹&#xff0c;并新增内容 3.创建package文件夹...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现&#xff08;两者等价&#xff09;&#xff0c;用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例&#xff1a; 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件&#xff0c;用于在原生应用中加载 HTML 页面&#xff1a; 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

Xen Server服务器释放磁盘空间

disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

基于PHP的连锁酒店管理系统

有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发&#xff0c;数据库mysql&#xff0c;前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...

【Elasticsearch】Elasticsearch 在大数据生态圈的地位 实践经验

Elasticsearch 在大数据生态圈的地位 & 实践经验 1.Elasticsearch 的优势1.1 Elasticsearch 解决的核心问题1.1.1 传统方案的短板1.1.2 Elasticsearch 的解决方案 1.2 与大数据组件的对比优势1.3 关键优势技术支撑1.4 Elasticsearch 的竞品1.4.1 全文搜索领域1.4.2 日志分析…...