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

SpringBoot缓存注解使用

背景

除了 RedisTemplate 外, 自Spring3.1开始,Spring自带了对缓存的支持。我们可以直接使用Spring缓存技术将某些数据放入本机的缓存中;Spring缓存技术也可以搭配其他缓存中间件(如Redis等)进行使用,将某些数据写入到缓存中间件(缓存中间件可能在其他机器上)中。

常用缓存

  1. @EnableCaching: 开启缓存注解功能,通常加在启动类上
  2. @Cacheable: 在方法执行前先查询缓存中是否有数据,如果有数据,则直接返回缓存数据,如果没有缓存数据,调用方法并将方法返回值放到缓存中。
  3. @CachePut: 将方法的返回值放到缓存中。
  4. @CacheEvit: 将一条或者多条数据从缓存中删除。

使用

1. 添加依赖并配置redis信息

在 pom.xml 中添加依赖

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

在 application.yml 文件中添加依赖

spring:redis:host: 192.168.**.***port: ****password: ****database: 1

2. 在启动类上添加 @EnableCaching 注解

在这里插入图片描述

3. 使用缓存注解

package com.itheima.controller;@RestController
@RequestMapping("/user")
@Slf4j
public class UserController {@Autowiredprivate UserMapper userMapper;@PostMapping// 使用 @CachePut 添加缓存数据, key 的生成: userCache::user.id,例如 userCache::12@CachePut(cacheNames = "userCache", key = "#user.id")public User save(@RequestBody User user){userMapper.insert(user);return user;}@DeleteMapping// 删除指定缓存@CacheEvict(cacheNames = "userCache", key = "#id")public void deleteById(Long id){userMapper.deleteById(id);}@DeleteMapping("/delAll")// 删除所有缓存@CacheEvict(cacheNames = "userCache", allEntries = true)public void deleteAll(){userMapper.deleteAll();}@GetMapping// key 的生成: userCache::12@Cacheable(cacheNames = "userCache", key = "#id")public User getById(Long id){User user = userMapper.getById(id);return user;}}

4. 结果

这里以 @CachePut 注解为例演示结果。
向表中添加数据后可以看到成功将新用户信息添加到了缓存中。
在这里插入图片描述
缓存中信息
在这里插入图片描述

相关文章:

  • 如何在Linux中打开core文件
  • 【手撕数据结构】拿捏单链表
  • 前后端分离项目部署,vue--nagix发布部署,.net--API发布部署。
  • TYPE-C接口PD取电快充协议芯片ECP5701:支持PD 2.0和PD 3.0(5V,9V,12V,15V,20V)
  • 【数据结构】探索排序的奥秘
  • HTML零基础自学笔记(上)-7.18
  • laravel框架基础通识-新手
  • 【计算机视觉】siamfc论文复现实现目标追踪
  • 基于 Electron+Vite+Vue3+Sass 框架搭建
  • Python爬虫(2) --爬取网页页面
  • HydraRPC: RPC in the CXL Era——论文阅读
  • 计算机视觉9 全卷积网络
  • 在 CentOS 7 上安装 Docker 并安装和部署 .NET Core 3.1
  • FPGA-计数器
  • 控制欲过强的Linux小进程
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • Java Agent 学习笔记
  • LeetCode29.两数相除 JavaScript
  • python 学习笔记 - Queue Pipes,进程间通讯
  • React+TypeScript入门
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • 分布式任务队列Celery
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 简单基于spring的redis配置(单机和集群模式)
  • 实现菜单下拉伸展折叠效果demo
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • 浅谈sql中的in与not in,exists与not exists的区别
  • ​渐进式Web应用PWA的未来
  • #if 1...#endif
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (Charles)如何抓取手机http的报文
  • (solr系列:一)使用tomcat部署solr服务
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (每日一问)操作系统:常见的 Linux 指令详解
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (转)EXC_BREAKPOINT僵尸错误
  • (转)使用VMware vSphere标准交换机设置网络连接
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • 、写入Shellcode到注册表上线
  • .NET 5.0正式发布,有什么功能特性(翻译)
  • .NET Core中Emit的使用
  • .net framework profiles /.net framework 配置
  • .NET WPF 抖动动画
  • .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表
  • .net流程开发平台的一些难点(1)
  • .NET企业级应用架构设计系列之应用服务器
  • .NET中分布式服务
  • @Validated和@Valid校验参数区别
  • @vue-office/excel 解决移动端预览excel文件触发软键盘
  • []使用 Tortoise SVN 创建 Externals 外部引用目录
  • [20140403]查询是否产生日志
  • [AI 大模型] Meta LLaMA-2