SpringCache入门

2023-12-14 23:20
文章标签 入门 springcache

本文主要是介绍SpringCache入门,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. SpringCache概述

Spring Cache 是 Spring 框架提供的一个用于提高应用性能的缓存抽象。它不是一个具体的缓存实现,而是提供了一组一致的编程模型来整合各种缓存机制,比如 EhCache、Caffeine、Redis 等。Spring Cache 使得开发者可以通过简单的注解来实现缓存的应用,而无需关心底层的缓存实现细节。

主要特性

  1. 抽象和透明的缓存操作:Spring Cache 提供了一个高度抽象的缓存操作层,允许开发者通过注解的方式进行缓存操作,无需直接与底层缓存提供者交互。

  2. 声明式缓存:支持通过注解(如 @Cacheable@CachePut@CacheEvict)声明方法的缓存行为。

  3. 灵活的缓存配置:可以灵活地配置缓存的各种属性,如过期时间、缓存大小等。

  4. 支持多种缓存库:与多种流行的缓存库整合,如 EhCache、Guava Cache、Caffeine、Redis等。

关键注解

  1. @Cacheable:在方法执行前,Spring 先查看缓存中是否存在之前执行过的结果,如果有则直接返回缓存数据,不再执行方法;如果没有,则执行方法并将结果存入缓存。

  2. @CachePut:无论如何都会执行方法,并将执行结果放入指定的缓存中。

  3. @CacheEvict:用于从缓存中移除相应的数据。

  4. @Caching:可以组合多个缓存操作。

  5. @CacheConfig:类级别的注解,用于共享缓存的名称、KeyGenerator、CacheManager等配置。

使用示例

@Service
public class MyService {@Cacheable(value = "users", key = "#id")public User getUserById(String id) {// 方法实现,比如从数据库获取用户信息}@CachePut(value = "users", key = "#user.id")public User updateUser(User user) {// 更新用户信息并返回return user;}@CacheEvict(value = "users", key = "#id")public void deleteUser(String id) {// 删除用户操作}
}

在此示例中,getUserById 方法被 @Cacheable 注解,这意味着其结果会被缓存,并且后续的同参数调用会直接使用缓存数据。updateUserdeleteUser 方法分别用 @CachePut@CacheEvict 注解,用于更新和移除缓存。

总结

Spring Cache 提供了一个简单而强大的缓存抽象,它使得在Spring应用中实现缓存变得容易且不依赖于具体的缓存实现,有助于提高应用性能,减少对外部系统(如数据库)的访问压力。

2. SpringCache使用完整案例

使用Spring Cache和Redis实现用户信息的缓存,我们需要进行以下步骤:

1. 添加依赖

首先,在Spring Boot项目中添加Spring Cache和Redis的依赖。对于Maven项目,在pom.xml文件中添加如下依赖:

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

2. 配置Redis

application.propertiesapplication.yml文件中配置Redis连接。例如:

spring.redis.host=localhost
spring.redis.port=6379

如果你使用Redis服务器的默认设置,那么通常只需要配置Redis服务器的地址和端口。

3. 启用缓存

在Spring Boot的主类上使用@EnableCaching注解来启用缓存支持:

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

4. 创建模型和服务

定义一个User模型和一个用户服务,例如:

public class User {private String id;private String name;// 省略getter和setter方法
}@Service
public class UserService {@Cacheable(value = "users", key = "#id")public User getUserById(String id) {// 模拟从数据库或其他服务中获取用户信息System.out.println("Retrieving from the database: " + id);return new User(id, "User" + id);}
}

使用@Cacheable注解,当调用getUserById方法时,Spring首先检查缓存users中是否有对应的条目。如果没有,它将执行方法,并将返回的结果存储在缓存中。

5. 创建控制器

创建一个控制器来处理Web请求:

@RestController
public class UserController {@Autowiredprivate UserService userService;@GetMapping("/user/{id}")public User getUser(@PathVariable String id) {return userService.getUserById(id);}
}

当客户端请求/user/{id}路由时,控制器将调用UserService来获取用户信息。

总结

在这个例子中,我们配置了Spring Boot应用来使用Redis作为缓存提供者。通过UserServicegetUserById方法,我们可以从缓存中检索用户信息,如果缓存中没有该用户的信息,就从数据库或其他数据源中获取,并将结果存储在缓存中。这样,对于相同的用户ID的后续请求,可以直接从Redis缓存中获取数据,从而减少对后端数据源的访问,提高应用性能。

这篇关于SpringCache入门的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/494270

相关文章

MySQL DQL从入门到精通

《MySQLDQL从入门到精通》通过DQL,我们可以从数据库中检索出所需的数据,进行各种复杂的数据分析和处理,本文将深入探讨MySQLDQL的各个方面,帮助你全面掌握这一重要技能,感兴趣的朋友跟随小... 目录一、DQL 基础:SELECT 语句入门二、数据过滤:WHERE 子句的使用三、结果排序:ORDE

Python中OpenCV与Matplotlib的图像操作入门指南

《Python中OpenCV与Matplotlib的图像操作入门指南》:本文主要介绍Python中OpenCV与Matplotlib的图像操作指南,本文通过实例代码给大家介绍的非常详细,对大家的学... 目录一、环境准备二、图像的基本操作1. 图像读取、显示与保存 使用OpenCV操作2. 像素级操作3.

POI从入门到实战轻松完成EasyExcel使用及Excel导入导出功能

《POI从入门到实战轻松完成EasyExcel使用及Excel导入导出功能》ApachePOI是一个流行的Java库,用于处理MicrosoftOffice格式文件,提供丰富API来创建、读取和修改O... 目录前言:Apache POIEasyPoiEasyExcel一、EasyExcel1.1、核心特性

Python中模块graphviz使用入门

《Python中模块graphviz使用入门》graphviz是一个用于创建和操作图形的Python库,本文主要介绍了Python中模块graphviz使用入门,具有一定的参考价值,感兴趣的可以了解一... 目录1.安装2. 基本用法2.1 输出图像格式2.2 图像style设置2.3 属性2.4 子图和聚

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

Python FastAPI入门安装使用

《PythonFastAPI入门安装使用》FastAPI是一个现代、快速的PythonWeb框架,用于构建API,它基于Python3.6+的类型提示特性,使得代码更加简洁且易于绶护,这篇文章主要介... 目录第一节:FastAPI入门一、FastAPI框架介绍什么是ASGI服务(WSGI)二、FastAP

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

数论入门整理(updating)

一、gcd lcm 基础中的基础,一般用来处理计算第一步什么的,分数化简之类。 LL gcd(LL a, LL b) { return b ? gcd(b, a % b) : a; } <pre name="code" class="cpp">LL lcm(LL a, LL b){LL c = gcd(a, b);return a / c * b;} 例题:

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

【IPV6从入门到起飞】5-1 IPV6+Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站,手机流量可以访问IPV6网络的服务,为什么不在电脑搭建Home Assistant(hass),来控制你的设备呢?@智能家居 @万物互联