Spring Cache 的说明及常用注解

news/2024/10/11 20:11:11/

一.介绍

     Spring Cache是Spring Framework中的一个模块,用于简化和统一缓存的使用。它提供了一种将缓存逻辑与应用程序业务逻辑分离的方式,使得我们可以更方便地使用缓存来提高应用程序的性能。

二.主要特性

  1. 注解支持:Spring Cache提供了一组注解(如@Cacheable@CachePut@CacheEvict),使得开发者可以通过简单的注解来定义缓存逻辑,而无需编写复杂的缓存管理代码。
  2. 多种缓存提供者支持:Spring Cache支持多种缓存实现,包括但不限于Ehcache、Caffeine、Redis、Hazelcast等。开发者可以根据需求选择合适的缓存提供者。
  3. 抽象层:Spring Cache提供了一个统一的抽象层,使得不同的缓存源可以在相同的API下工作,降低了锁定于某一特定缓存实现的风险。
  4. 灵活的配置:通过XML或Java配置,Spring Cache允许灵活地配置缓存属性,如过期时间、缓存名称等。

三.常用注解

1.@EnableCaching

  • 说明:启用缓存注解功能,通常加在启动类上。
  • 用途:使得 Spring 能够解析缓存注解并执行相关的缓存操作。
java">import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;@SpringBootApplication
@EnableCaching  // 启用缓存
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}

2.@Cacheable(常用于查询操作)

  • 说明:在方法上标记该方法的返回值可以缓存。
  • 用途:在方法执行前先查询缓存是否有数据。如果有,则直接返回缓存数据;如果没有,则执行方法并将返回值放入缓存中。
java">import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;@Service
public class UserService {@Cacheable("users")  // 指定缓存的名称public User getUserById(Long id) {// 假设从数据库查询用户return userRepository.findById(id);}
}

3.@CachePut(常用于更新操作)

  • 说明:更新缓存,直接将方法的返回值放入缓存中。
  • 用途:无论是否命中缓存,都会执行该方法,并将结果放入缓存中。
java">import org.springframework.cache.annotation.CachePut;
import org.springframework.stereotype.Service;@Service
public class UserService {@CachePut(value = "users", key = "#user.id")  // 通过用户ID作为缓存键public User updateUser(User user) {// 假设更新用户信息到数据库return userRepository.save(user);}
}

4.@CacheEvict

  • 说明:从缓存中移除一条或多条数据。
  • 用途:可以在更新或删除数据后,清理相关缓存以保持数据一致性。
java">import org.springframework.cache.annotation.CacheEvict;
import org.springframework.stereotype.Service;@Service
public class UserService {@CacheEvict(value = "users", key = "#id")  // 根据用户ID移除缓存public void deleteUser(Long id) {// 假设删除数据库中的用户userRepository.deleteById(id);}
}
通过这些注解的组合使用,能够有效提高系统的性能和响应速度,特别是在频繁读取数据的场景下。

http://www.ppmy.cn/news/1537610.html

相关文章

通过onnxruntime进行模型部署过程中的问题

​ 1. onnxruntime包下载 从https://github.com/microsoft/onnxruntime/releases/下载解压到E:/code/package/onnruntime 2. opencv_c下载https://github.com/opencv/opencv/releases/tag/4.8.1 3.测试opencv代码:总结:添加include目录,添…

Leetcode 买卖股票的最佳时机

这段代码的目的是解决“买卖股票的最佳时机”这个问题,即在给定的股票价格数组中,找到一次买入和卖出所能获得的最大利润。 算法思想: 定义两个变量: minPrice: 这个变量用于记录迄今为止遇到的最小股票价格(买入价格…

Stable Diffusion绘画 | 签名、字体、Logo设计

第1步,使用 PS(小白推荐使用 可画)准备一个 512*768 的签名、字体、Logo图片: 第2步,来到模型网站,搜索🔍关键词“电商”,找到一款喜欢的 LoRA: 第3步,选择一…

学习JavaScript的真假值然后理解!!运算符的使用

真值(truthy)和假值(falsy) 在 JavaScript 中,有一些值总是被认为是假值(falsy),其他的都被认为是真值(truthy)。以下是常见的假值: false0&…

线性代数书中求解齐次线性方程组、非齐次线性方程组方法的特点和缺陷(附实例讲解)

目录 一、克拉默法则 1. 方法概述 2. 例16(1) P45 3. 特点 (1) 只适用于系数矩阵是方阵 (2) 只适用于行列式非零 (3) 只适用于唯一解的情况 (4) 只适用于非齐次线性方程组 二、逆矩阵 1. 方法概述 2. 例16(2) P45 3. 特点 (1) 只适用于系数矩阵必须是方阵且可逆 …

Docker容器简介及部署方法

1.1 Docker简介 Docker之父Solomon Hykes:Docker就好比传统的货运集装箱 2008 年LXC(LinuX Contiainer)发布,但是没有行业标准,兼容性非常差 docker2013年首次发布,由Docker, Inc开发 1.1.1什么是Docker Docker是管理容器的引…

蓝桥等级考试C++组18级真题-2023-06-18

选择题 1 C L18(15分) 已定义double rate 3.921576;以下可以正确输出变量rate 的是()。 A printf("%d",rate); B printf("%f",rate); C printf("%ld",rate); D printf("%r",rate)&#…

绘制YOLOv11模型在训练过程中,精准率,召回率,mAP_0.5,mAP_0.5:0.95,以及各种损失的变化曲线

一、本文介绍 本文用于绘制模型在训练过程中,精准率,召回率,mAP_0.5,mAP_0.5:0.95,以及各种损失的变化曲线。用以比较不同算法的收敛速度,最终精度等,并且能够在论文中直观的展示改进效果。支持多文件的数据比较。 专栏目录:YOLOv11改进目录一览 | 涉及卷积层、轻量化…