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

Redis缓存——Spring Cache入门学习

Spring Cache

介绍

Spring Cache 是一个框架,实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存功能。

Spring Cache 提供了一层抽象,底层可以切换不同的缓存实现,例如:

  • EHCache
  • Caffeine
  • Redis(常用)

起步依赖:

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

常用注解

在SpringCache中提供了很多缓存操作的注解,常见的是以下的几个:

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

在spring boot项目中,使用缓存技术只需在项目中导入相关缓存技术的依赖包,并在启动类上使用@EnableCaching开启缓存支持即可。

例如,使用Redis作为缓存技术,只需要导入Spring data Redis的maven坐标即可。

入门案例

1). 环境准备

数据库准备:

创建名为spring_cache_demo数据库,将springcachedemo.sql脚本直接导入数据库中。

在这里插入图片描述

引导类上加@EnableCaching:

package com.shisan;import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;@Slf4j
@SpringBootApplication
@EnableCaching//开启缓存注解功能
public class CacheDemoApplication {public static void main(String[] args) {SpringApplication.run(CacheDemoApplication.class,args);log.info("项目启动成功...");}
}

2). @CachePut注解

@CachePut 说明:

​ 作用: 将方法返回值,放入缓存

​ value: 缓存的名称, 每个缓存名称下面可以有很多key

​ key: 缓存的key ----------> 支持Spring的表8

在save方法上加注解@CachePut

当前UserController的save方法是用来保存用户信息的,我们希望在该用户信息保存到数据库的同时,也往缓存中缓存一份数据,我们可以在save方法上加上注解 @CachePut,用法如下:

	/*** CachePut:将方法返回值放入缓存* value:缓存的名称,每个缓存名称下面可以有多个key* key:缓存的key*/@PostMapping@CachePut(value = "userCache", key = "#user.id")//key的生成:userCache::1public User save(@RequestBody User user){userMapper.insert(user); return user;}

说明: key的写法如下

#user.id : #user指的是方法形参的名称, id指的是user的id属性 , 也就是使用user的id属性作为key ;

#result.id : #result代表方法返回值,该表达式 代表以返回对象的id属性作为key ;

#p0.id:#p0指的是方法中的第一个参数,id指的是第一个参数的id属性,也就是使用第一个参数的id属性作为key ;

#a0.id:#a0指的是方法中的第一个参数,id指的是第一个参数的id属性,也就是使用第一个参数的id属性作为key ;

#root.args[0].id:#root.args[0]指的是方法中的第一个参数,id指的是第一个参数的id属性,也就是使用第一个参数

的id属性作为key ;

启动服务,通过swagger接口文档测试,访问UserController的save()方法

因为id是自增,所以不需要设置id属性

在这里插入图片描述

查看user表中的数据

在这里插入图片描述

查看Redis中的数据

在这里插入图片描述

3). @Cacheable注解

@Cacheable 说明:

​ 作用: 在方法执行前,spring先查看缓存中是否有数据,如果有数据,则直接返回缓存数据;若没有数据,调用方法并将方法返回值放到缓存中

​ value: 缓存的名称,每个缓存名称下面可以有多个key

​ key: 缓存的key ----------> 支持Spring的表达式语言SPEL语法

在getById上加注解@Cacheable

	/*** Cacheable:在方法执行前spring先查看缓存中是否有数据,如果有数据,则直接返回缓存数据;若没有数据,	  *调用方法并将方法返回值放到缓存中* value:缓存的名称,每个缓存名称下面可以有多个key* key:缓存的key*/@GetMapping@Cacheable(cacheNames = "userCache",key="#id")public User getById(Long id){User user = userMapper.getById(id);return user;}

重启服务,通过swagger接口文档测试,访问UserController的getById()方法

第一次访问,会请求我们controller的方法,查询数据库。后面再查询相同的id,就直接从Redis中查询数据,不用再查询数据库了,就说明缓存生效了。

提前在redis中手动删除掉id=1的用户数据

在这里插入图片描述

**查看控制台sql语句:**说明从数据库查询的用户数据

在这里插入图片描述

**查看Redis中的缓存数据:**说明已成功缓存

在这里插入图片描述

再次查询相同id的数据时,直接从redis中直接获取,不再查询数据库。

4). @CacheEvict注解

@CacheEvict 说明:

​ 作用: 清理指定缓存

​ value: 缓存的名称,每个缓存名称下面可以有多个key

​ key: 缓存的key ----------> 支持Spring的表达式语言SPEL语法

在 delete 方法上加注解@CacheEvict

	@DeleteMapping@CacheEvict(cacheNames = "userCache",key = "#id")//删除某个key对应的缓存数据public void deleteById(Long id){userMapper.deleteById(id);}@DeleteMapping("/delAll")@CacheEvict(cacheNames = "userCache",allEntries = true)//删除userCache下所有的缓存数据public void deleteAll(){userMapper.deleteAll();}

重启服务,通过swagger接口文档测试,访问UserController的deleteAll()方法

在这里插入图片描述

**查看user表:**数据清空

在这里插入图片描述

查询Redis缓存数据

在这里插入图片描述

http://www.lryc.cn/news/250524.html

相关文章:

  • Python标准库copy【侯小啾python领航班系列(十五)】
  • Android--Jetpack--Lifecycle详解
  • LeetCode105.从前序和中序遍历序列构造二叉树
  • flutter-一个可以输入的数字增减器
  • 抑郁症中西医治疗对比?
  • 012 OpenCV sobel边缘检测
  • 【开源视频联动物联网平台】libmodbus 写一个modbus tcp客户端
  • 安装以及使用 stylepro_artistic 所遇问题解决
  • 【Rust】所有权的认识
  • 中间件安全:Weblogic 漏洞.(使用工具可以利用多种类型漏洞)
  • matlab操作方法(一)——向量及其操作
  • MicroPython标准库
  • 2023年产业数据价值化峰会暨数栖大会-核心PPT资料下载
  • 深入理解 Vue 组件:构建优雅的前端应用
  • 基于SpringBoot+Vue的前后端分离的房屋租赁系统2
  • PHPExcel 导出Excel报错:PHPExcel_IOFactory::load()
  • Jmeter-分布式压测(远程启动服务器,windows)
  • 【C++】string类模拟实现过程中值得注意的点
  • 大数据湖项目建设方案:文档全文101页,附下载
  • 通付盾Web3专题 | SharkTeam:起底朝鲜APT组织Lazarus Group,攻击手法及洗钱模式
  • <蓝桥杯软件赛>零基础备赛20周--第8周第1讲--十大排序
  • 数据增强让模型更健壮
  • Redis远程字典服务
  • Hdoop学习笔记(HDP)-Part.15 安装HIVE
  • vue3+element-plus之el-date-picker日期选择器清空无回调的解决方案
  • 【虚拟机】Docker基础 【二】
  • CSS 绝对定位问题和粘性定位介绍
  • matlab 计算两点云之间的放缩倍数
  • MySQL-数据库设计与实现
  • 后端返回图片流前端展示图片