spring cache的使用(Redis)

在这里插入图片描述
要在Spring Boot应用中使用Redis作为缓存,你需要遵循一些步骤来配置和使用Redis。以下是使用Spring Cache抽象与Redis进行整合的详细说明:

1. 添加依赖

首先,需要在pom.xml中添加Spring Boot的Redis starter依赖以及缓存的starter依赖。这会自动引入Spring Data Redis和相关的库。

<dependencies><!-- Spring Boot Redis Starter --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><!-- Spring Boot Cache Starter --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId></dependency>
</dependencies>

2. 配置Redis

接下来,需要在application.propertiesapplication.yml文件中配置Redis服务器的连接信息。

# Redis配置
spring.redis.host=localhost
spring.redis.port=6379
# 如果Redis设置了密码,还需要配置密码
# spring.redis.password=yourpassword

3. 启用缓存支持

在Spring Boot的主配置类上添加@EnableCaching注解以启用缓存支持。

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

4. 使用缓存注解

现在,你可以在服务层或其他组件中使用@Cacheable@CacheEvict@CachePut注解来操作缓存。

@Service
public class UserService {@Cacheable(value = "users", key = "#userId")public User getUserById(String userId) {// 从数据库或其他地方获取用户信息return new User(userId, "Example User");}@CachePut(value = "users", key = "#user.id")public User updateUser(User user) {// 更新用户信息逻辑return user;}@CacheEvict(value = "users", key = "#userId")public void deleteUser(String userId) {// 删除用户逻辑}
}

5. 配置缓存管理器(可选)

虽然Spring Boot为Redis提供了自动配置,但你可能需要自定义缓存管理器以调整其行为。你可以通过配置一个CacheManager Bean来实现这一点。

@Configuration
public class RedisConfig {@Beanpublic CacheManager cacheManager(RedisConnectionFactory connectionFactory) {RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofHours(1)) // 设置缓存有效期为1小时.disableCachingNullValues(); // 不缓存空值return RedisCacheManager.builder(connectionFactory).cacheDefaults(config).build();}
}

6. 运行和测试

一旦完成上述配置,你的Spring Boot应用就已经配置好了Redis缓存。当你调用使用了缓存注解的方法时,Spring会自动处理缓存的读取和更新,将数据存储在Redis中。

注意事项

  • 确保Redis服务器正在运行,并且连接信息配置正确。
  • 根据需要调整缓存的各种设置,例如缓存的有效期、序列化机制等。
  • 考虑到Redis是基于内存的存储系统,确保你的Redis实例有足够的内存来存储缓存数据。

通过以上步骤,你可以在Spring Boot应用中轻松地使用Redis进行高效的数据缓存和访问。
@Cacheable是Spring Cache提供的一个注解,用于声明某个方法的返回值是可以被缓存的。当标记了@Cacheable的方法被调用时,Spring Cache会首先检查缓存中是否存在已经缓存的数据。如果缓存中存在对应的数据,则直接返回缓存的数据,而不需要执行方法本身。如果缓存中没有对应的数据,那么会执行方法本身,然后将方法的返回值放入缓存中。

在给出的示例中:

@Cacheable(value = "users", key = "#userId")
public User getUserById(String userId) {// 从数据库或其他地方获取用户信息return new User(userId, "Example User");
}
  • @Cacheable(value = "users", key = "#userId"): 这里的@Cacheable注解表示getUserById方法的返回值是可缓存的。
    • value = "users": 指定缓存的名称为"users"。在配置缓存实现时,可以根据这个名称来设置不同缓存的不同参数,例如过期时间、最大容量等。在同一个应用中,不同的缓存名称对应不同的缓存区域。
    • key = "#userId": 指定缓存的key。这里使用的是Spring Expression Language (SpEL) 表达式#userId,它表示方法的参数userId的值将被用作缓存的key。这意味着,对于相同的userId参数值,方法只会在第一次被调用时执行并缓存结果;之后相同userId值的调用将直接返回缓存中的数据。

在实际执行时,如果你第一次调用getUserById("123"),方法会执行,查询数据库或其他数据源获取用户信息,并将结果(假设是new User("123", "Example User"))缓存到名为"users"的缓存中,其中key为"123"。当你再次调用getUserById("123")时,Spring Cache会检查"users"缓存中是否存在key为"123"的缓存项。由于该缓存项存在,Spring Cache会直接返回缓存中的数据,而不是再次执行方法体内的代码。

这种方式显著提高了性能,特别是在获取用户信息这样的操作中,通常涉及到对数据库的访问,这可能是一个相对较慢的操作。通过缓存这些操作的结果,可以减少对数据库的访问次数,从而提高应用程序的响应速度和整体性能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/444583.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【web | CTF】攻防世界 easyupload

天命&#xff1a;好像也不太easy 目录 步骤一&#xff1a;准备文件 步骤二&#xff1a;上传文件 本条题目有好几个防御点&#xff1a; 后缀名防御&#xff1a;只能上传图片格式内容防御&#xff1a;内容不能有php图片头防御&#xff1a;检测文件的头部信息&#xff0c;是否是…

【AI大模型应用开发】【附】常用Prompt记录 - 论文全文写作

后面我会不定时更新下我看过的觉得比较好的Prompt&#xff0c;与大家分享&#xff0c;自己也做下记录。 切记&#xff1a;不要全部寄希望于Prompt和大模型能完成你的工作&#xff0c;它的输出天花板&#xff0c;取决于你的认知和能力。你在使用Prompt前&#xff0c;你应该具有对…

如何使用java来操作git/gitlab?

在我们的学习和开发过程中&#xff0c;git作为一个优秀的分布式版本控制工具是经常会被我们使用到的&#xff0c;那么如何通过java代码来实现Git的更新&#xff0c;提交&#xff0c;推送等操作呢&#xff1f;下面整理了三种实现方式&#xff1a; 1.首先我们会想到的应该是寻找市…

2024年【煤炭生产经营单位(安全生产管理人员)】考试题及煤炭生产经营单位(安全生产管理人员)试题及解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 煤炭生产经营单位&#xff08;安全生产管理人员&#xff09;考试题是安全生产模拟考试一点通生成的&#xff0c;煤炭生产经营单位&#xff08;安全生产管理人员&#xff09;证模拟考试题库是根据煤炭生产经营单位&…

Flink实战五_状态机制

接上文&#xff1a;Flink实战四_TableAPI&SQL 在学习Flink的状态机制之前&#xff0c;我们需要理解什么是状态。回顾我们之前介绍的很多流计算的计算过程&#xff0c;有些计算方法&#xff0c;比如说我们之前多次使用的将stock.txt中的一行文本数据转换成Stock股票对象的ma…

某赛通电子文档安全管理系统 PolicyAjax SQL注入漏洞复现

0x01 产品简介 某赛通电子文档安全管理系统(简称:CDG)是一款电子文档安全加密软件,该系统利用驱动层透明加密技术,通过对电子文档的加密保护,防止内部员工泄密和外部人员非法窃取企业核心重要数据资产,对电子文档进行全生命周期防护,系统具有透明加密、主动加密、智能…

TypeScript实战教程(一):表单上传与后端处理

TypeScript实战教程&#xff08;一&#xff09;&#xff1a;表单上传与后端处理 文章目录 TypeScript实战教程&#xff08;一&#xff09;&#xff1a;表单上传与后端处理一、前言1、TypeScript介绍2、TypeScript的关键特性包括&#xff1a;3、使用场景4、编译过程 二、环境配置…

【RT-DETR有效改进】 利用Damo-YOLO的RepGFPN改进特征融合层(高效重参数化Neck)

👑欢迎大家订阅本专栏,一起学习RT-DETR👑 一、本文介绍 本文给大家带来的改进机制是Damo-YOLO的RepGFPN(重参数化泛化特征金字塔网络),利用其优化RT-DETR的Neck部分,可以在不影响计算量的同时大幅度涨点(亲测在小目标和大目标检测的数据集上效果均表现良好涨点幅…

Python代码重构库之rope使用详解

概要 Python是一门强大的编程语言,但在大型项目中,维护和重构代码可能会变得复杂和困难。为了提高开发人员的效率和准确性,有许多工具可用于辅助代码重构和智能代码补全。其中之一是Python Rope。 Python Rope是一个用于Python编程语言的强大工具,它提供了丰富的功能,包…

Idea编写mapper.xml文件提示表名和字段

一、连接database 二、setting- > language -> sql Dialects中 的选项设为 mysql就可以了 三、测试

接口自动化代码不会写?试试RunnerGo

RunnerGo支持自动化测试功能&#xff0c;RunnerGo的工作流程是&#xff1a;接口管理-场景管理-性能测试-自动化测试&#xff0c;所以自动化测试的运行内容为场景下的用例&#xff0c;我们可以在“场景管理”中预先配置好该场景下的用例&#xff0c;也可以在自动化测试中创建用例…

VSCode 设置代理

Open Visual Studio Code, click the settings icon in the lower left corner, and click Settings.