在 Spring Boot 应用中使用 Spring Cache 和 Redis 实现数据查询的缓存功能

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 在 Spring Boot 应用中使用 Spring Cache 和 Redis 实现数据查询的缓存功能

在 Spring Boot 应用中使用 Spring Cache 和 Redis 实现数据查询的缓存功能是一种常见的优化方法,可以显著提高应用程序的性能和响应速度。下面我将详细介绍如何配置和使用这两个技术来实现数据查询的缓存。

 

### 1. 添加依赖

 

首先,确保在 `pom.xml`(如果是 Maven 项目)或 `build.gradle`(如果是 Gradle 项目)中添加必要的依赖:

 

#### Maven 依赖

 

```xml
    org.springframework.boot
    spring-boot-starter-cache
    org.springframework.boot
    spring-boot-starter-data-redis
```

#### Gradle 依赖

 

```gradle
implementation 'org.springframework.boot:spring-boot-starter-cache'
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
```

### 2. 配置 Redis

 

在 `application.properties` 或 `application.yml` 中配置 Redis 连接信息:

 

```properties
spring.redis.host=localhost
spring.redis.port=6379
spring.redis.password=  # 如果有密码,请填写
spring.redis.database=0  # Redis数据库索引,默认为0
```

### 3. 配置 Spring Cache

 

在 Spring Boot 主类(带有 `@SpringBootApplication` 注解的类)或配置类上,使用 `@EnableCaching` 开启缓存功能,并配置一个 `CacheManager` 来管理缓存:

 

```java
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializationContext;
 
@Configuration
@EnableCaching
public class CacheConfig {
 
    @Bean
    public RedisCacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
        RedisCacheConfiguration cacheConfiguration = RedisCacheConfiguration.defaultCacheConfig()
                .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()));
 
        return RedisCacheManager.builder(redisConnectionFactory)
                .cacheDefaults(cacheConfiguration)
                .build();
    }
}
```

### 4. 使用缓存

 

在 Service 层的方法上使用 `@Cacheable` 注解来实现缓存功能。例如:

 

```java
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
 
@Service
public class MyDataService {
 
    @Cacheable(value = "myDataCache", key = "#id")
    public String getDataById(Long id) {
        // 模拟查询数据库或其他耗时操作
        // 实际项目中,这里应该是从数据库或其他服务获取数据的逻辑
        System.out.println("Fetching data from method for id: " + id);
        return "Data for id " + id;
    }
}
```

在这个例子中,`@Cacheable` 注解的 `value` 属性指定了缓存的名称(例如 `myDataCache`),`key` 属性指定了缓存的键,这里使用方法的参数 `id` 作为缓存的键。

 

### 5. 测试缓存效果

 

编写一个简单的 Controller 来测试缓存效果:

 

```java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
 
@RestController
public class MyDataController {
 
    @Autowired
    private MyDataService myDataService;
 
    @GetMapping("/data/{id}")
    public String getDataById(@PathVariable Long id) {
        return myDataService.getDataById(id);
    }
}
```

### 6. 测试缓存

 

启动我们的 Spring Boot 应用程序,并访问 `http://localhost:8080/data/{id}`,多次访问相同的 `id`,可以观察到第一次访问会执行方法体内的逻辑,而后续访问将直接从 Redis 缓存中获取数据,不会再次执行方法体内的逻辑。

 

通过以上步骤,我们就成功地集成了 Spring Cache 和 Redis,实现了数据查询的缓存功能。这种方式非常适合于需要频繁访问和不经常变化的数据,可以有效减少数据库或其他服务的访问压力,提升系统的性能和响应速度。

目录
相关文章
|
1月前
|
监控 Java API
Spring Boot 3.2 结合 Spring Cloud 微服务架构实操指南 现代分布式应用系统构建实战教程
Spring Boot 3.2 + Spring Cloud 2023.0 微服务架构实践摘要 本文基于Spring Boot 3.2.5和Spring Cloud 2023.0.1最新稳定版本,演示现代微服务架构的构建过程。主要内容包括: 技术栈选择:采用Spring Cloud Netflix Eureka 4.1.0作为服务注册中心,Resilience4j 2.1.0替代Hystrix实现熔断机制,配合OpenFeign和Gateway等组件。 核心实操步骤: 搭建Eureka注册中心服务 构建商品
308 3
|
29天前
|
人工智能 监控 安全
如何快速上手【Spring AOP】?核心应用实战(上篇)
哈喽大家好吖~欢迎来到Spring AOP系列教程的上篇 - 应用篇。在本篇,我们将专注于Spring AOP的实际应用,通过具体的代码示例和场景分析,帮助大家掌握AOP的使用方法和技巧。而在后续的下篇中,我们将深入探讨Spring AOP的实现原理和底层机制。 AOP(Aspect-Oriented Programming,面向切面编程)是Spring框架中的核心特性之一,它能够帮助我们解决横切关注点(如日志记录、性能统计、安全控制、事务管理等)的问题,提高代码的模块化程度和复用性。
|
1月前
|
安全 算法 Java
在Spring Boot中应用Jasypt以加密配置信息。
通过以上步骤,可以在Spring Boot应用中有效地利用Jasypt对配置信息进行加密,这样即使配置文件被泄露,其中的敏感信息也不会直接暴露给攻击者。这是一种在不牺牲操作复杂度的情况下提升应用安全性的简便方法。
583 10
|
2月前
|
安全 Java Nacos
0代码改动实现Spring应用数据库帐密自动轮转
Nacos作为国内被广泛使用的配置中心,已经成为应用侧的基础设施产品,近年来安全问题被更多关注,这是中国国内软件行业逐渐迈向成熟的标志,也是必经之路,Nacos提供配置加密存储-运行时轮转的核心安全能力,将在应用安全领域承担更多职责。
|
2月前
|
NoSQL Java Redis
Redis基本数据类型及Spring Data Redis应用
Redis 是开源高性能键值对数据库,支持 String、Hash、List、Set、Sorted Set 等数据结构,适用于缓存、消息队列、排行榜等场景。具备高性能、原子操作及丰富功能,是分布式系统核心组件。
343 2
|
2月前
|
Java Linux 网络安全
Linux云端服务器上部署Spring Boot应用的教程。
此流程涉及Linux命令行操作、系统服务管理及网络安全知识,需要管理员权限以进行配置和服务管理。务必在一个测试环境中验证所有步骤,确保一切配置正确无误后,再将应用部署到生产环境中。也可以使用如Ansible、Chef等配置管理工具来自动化部署过程,提升效率和可靠性。
284 13
|
前端开发 JavaScript Java
SpringBoot实现国际化i18n功能
SpringBoot实现国际化i18n功能
1204 0
SpringBoot实现国际化i18n功能
|
4月前
|
JavaScript 前端开发 Java
制造业ERP源码,工厂ERP管理系统,前端框架:Vue,后端框架:SpringBoot
这是一套基于SpringBoot+Vue技术栈开发的ERP企业管理系统,采用Java语言与vscode工具。系统涵盖采购/销售、出入库、生产、品质管理等功能,整合客户与供应商数据,支持在线协同和业务全流程管控。同时提供主数据管理、权限控制、工作流审批、报表自定义及打印、在线报表开发和自定义表单功能,助力企业实现高效自动化管理,并通过UniAPP实现移动端支持,满足多场景应用需求。
414 1
|
5月前
|
前端开发 Java 关系型数据库
基于Java+Springboot+Vue开发的鲜花商城管理系统源码+运行
基于Java+Springboot+Vue开发的鲜花商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的鲜花商城管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。技术学习共同进步
407 7
|
4月前
|
供应链 JavaScript BI
ERP系统源码,基于SpringBoot+Vue+ElementUI+UniAPP开发
这是一款专为小微企业打造的 SaaS ERP 管理系统,基于 SpringBoot+Vue+ElementUI+UniAPP 技术栈开发,帮助企业轻松上云。系统覆盖进销存、采购、销售、生产、财务、品质、OA 办公及 CRM 等核心功能,业务流程清晰且操作简便。支持二次开发与商用,提供自定义界面、审批流配置及灵活报表设计,助力企业高效管理与数字化转型。
425 2
ERP系统源码,基于SpringBoot+Vue+ElementUI+UniAPP开发