spring cache整合redis实现springboot项目中的缓存功能
创始人
2025-06-01 12:06:13
0

一、Spring Cache介绍

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

提供了一层抽象,底层可以切换不同的cache实现。具体就是通过CacheManager接口统一不同的缓存技术。

CacheManager是Spring提供的各种缓存技术抽象接口。

针对不同的缓存技术需要实现不同的CacheManager:
在这里插入图片描述

二、spring cache注解

@CacheConfig 类级别的缓存注解,允许共享缓存名称

@Caching 将多种缓存操作分组

@Cacheable 触发缓存入口

@CacahePut 更新缓存

@CacheEvict 触发移除缓存

最常用的为最后三个:@Cacheable、@CacheEvict、@CacheEvict

三、实现步骤

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

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

缓存套餐数据

1,实现思路

前面我们已经实现了移动端套餐查看功能,对应的服务端方法为SetmealController的list方法,此方法会根据前端提交的查询条件进行数据库查询操作。在高并发的情况下,频繁查询数据库会导致系统性能下降,服务端响应时间增长。现在需要对此方法进行缓存优化,提高系统的性能。
具体的实现思路如下:

2,导入spring cache和redis相关的maven坐标

        org.springframework.bootspring-boot-starter-data-redisorg.springframework.bootspring-boot-starter-cache

3,在application.yml中配置缓存数据的过期时间

  cache:redis:time-to-live: 1800000  #设置缓存数据的过期时间 30分钟

4,在启动类上加入@EnableCaching注解,开启缓存注解功能

/*** @author tigerhhzz* @date 2023/3/11 19:37*/
@Slf4j
@SpringBootApplication
@ServletComponentScan
@EnableTransactionManagement(proxyTargetClass = true)
@EnableCaching  //开启缓存注解功能
public class tigerhhzzwaimaiappliction {public static void main(String[] args) {SpringApplication.run(tigerhhzzwaimaiappliction.class,args);log.info("tiger的项目启动成功。");}
}

5,在方法上加注解@Cacheable注解

在setmealcontroller的list方法上加入@Cacheable注解

    /***查询套餐列表* @param setmeal* @return*/@GetMapping("/list")@Cacheable(value = "setmealCache",key = "#setmeal.categoryId + '_' + #setmeal.status")public R> list(Setmeal setmeal) {log.info("setmeal:{}", setmeal);//条件构造器LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();queryWrapper.like(StringUtils.isNotEmpty(setmeal.getName()), Setmeal::getName, setmeal.getName());queryWrapper.eq(null != setmeal.getCategoryId(), Setmeal::getCategoryId, setmeal.getCategoryId());queryWrapper.eq(null != setmeal.getStatus(), Setmeal::getStatus, setmeal.getStatus());queryWrapper.orderByDesc(Setmeal::getUpdateTime);return R.success(setmealService.list(queryWrapper));}

在setmealcontroller的sava和delete方法上加入CacheEvict注解

    /*** 新增套餐* @param setmealDto* @return*/@PostMapping@CacheEvict(value = "setmealCache",allEntries = true)public R save(@RequestBody SetmealDto setmealDto){log.info("套餐信息:{}",setmealDto);setmealService.saveWithDish(setmealDto);return R.success("新增套餐成功");}
    /*** 删除套餐** @param ids* @return*/@DeleteMapping@CacheEvict(value = "setmealCache",allEntries = true)public R delete(@RequestParam List ids){log.info("ids:{}",ids);setmealService.removeWithDish(ids);return R.success("套餐数据删除成功");}

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
【Ctfer训练计划】——(三... 作者名:Demo不是emo  主页面链接:主页传送门 创作初心ÿ...