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

Spring Cache快速入门

Spring Cache 是一个框架,实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存功能。 Spring Cache 提供了一层抽象,底层可以切换不同的缓存实现,

例如: EHCache Caffeine Redis

Maven坐标导入

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

Spring Cache常用注解

注解

说明

@EnableCaching

开启缓存注解功能,通常加在启动类上

@Cacheable

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

@CachePut

将方法的返回值放到缓存中

@CacheEvict

将一条或多条数据从缓存中删除

使用实例

    /*** 条件查询** @param categoryId* @return*/@GetMapping("/list")@ApiOperation("根据分类id查询套餐")@Cacheable(cacheNames ="setmealCache", key = "#categoryId")public Result<List<Setmeal>> list(Long categoryId) {Setmeal setmeal = new Setmeal();setmeal.setCategoryId(categoryId);setmeal.setStatus(StatusConstant.ENABLE);List<Setmeal> list = setmealService.list(setmeal);return Result.success(list);}

如上代码,当需要查询时,因为使用了Cacheable注解,程序会先到redis中寻找对应的key是否存在,如果存在则直接取出其数据,不执行方法的代码,如果不存在则执行方法并把方法返回值存储到redis中,返回值在redis中的key为 cacheNames::key,上述代码为setmealCache::categoryId。key标签内的值如果是"#方法参数名"则是直接从方法的参数中获取对应的值,即获取到前端传来的参数值。如果使用的是"#result"则是获取到当前方法的返回结果。还有一种写法是用p0,p1或a0,a1获取到对应的参数。例如上述代码若使用key="#p0"则代表获取参数列表的第一个参数,即为categoryId,如果使用key="#p1"则为第二个参数(当然现在的代码里拿不到,因为没有第二个参数,会报错)。

示例二

    @PostMapping@ApiOperation("新增套餐")@CacheEvict(cacheNames = "setmealCache" ,key = "#setmealDTO.categoryId")public Result save(@RequestBody SetmealDTO setmealDTO){log.info("新增套餐");setmealService.save(setmealDTO);return Result.success();}

以上是CacheEvict的使用示例,代表当新增套餐时,会从redis中删除名为setmealCache::categoryId的key。

示例三

 @DeleteMapping@ApiOperation("删除套餐")@CacheEvict(cacheNames = "setmealCache" ,allEntries = true)public Result delete(@RequestParam List<Long> ids){log.info("根据id批量删除套餐");setmealService.delete(ids);return Result.success();}

当需要删除setmealCache全部的缓存时,可以加入allEntries标签并设置为true,此时可以将setmealCache::any,都删掉。

http://www.dtcms.com/a/577451.html

相关文章:

  • 网站底部横条导航代码做网站的怎么挣钱、
  • 【科研绘图系列】R语言绘制散点图(scatter plot)
  • Supabase 概述
  • 【微服务】(3) 服务注册与发现
  • 网站综合查询工具做推文的编辑网站
  • Prometheus实战教程 05 - 告警通知实现 - 邮件 + 钉钉 + 自定义告警模板
  • SELinux 故障排除完全指南:从拒绝访问到快速修复
  • 【Linux】Socket编程预备及UDP
  • 建站运营新闻网页设计需要学什么学历
  • 开题报告之基于SpringBoot框架的图书借阅系统的设计与实现
  • 金融RAG落地之痛:不在模型,而在数据结构
  • Spring Boot 中数据源自动配置的核心流程
  • Java HashMap深度解析:数据结构、原理与实战指南
  • 宁夏建设网站的公司电话大学生为什么不去中建
  • android su执行命令
  • 面向强化学习的状态空间建模:RSSM的介绍和PyTorch实现(2)
  • 从数据孤岛到智能决策:企业能碳管理破局五维策略
  • 构建面向信创生态的数据中台(一):骨架与血液——DML/DDL职责划分与执行机制
  • C语言-数据结构-1-动态数组
  • iOS 审核 上架 被拒 4.3a 【改革】【灾难来袭】
  • 从0开始学算法——第二天(时间、空间复杂度)
  • Jenkins使用指南1
  • 在 macOS 上使用 Homebrew 安装 MySQL 8.0 完整指南
  • redis 在网站开发中怎么用江西网站建设销售电话
  • AIoT | 软件:Astra MCP边缘算力构建详解
  • Apache Paimon 查询全流程深度分析
  • 网站中英文切换代码企业服务器配置方案
  • 专业的内蒙古网站建设160外发加工网
  • 团队学习与企业破局
  • 编程语言|前端开发——WebAssembly 和 JavaScript 该怎么选?