JavaWeb_瑞吉外卖_项目优化Day10-Spring Cache

这篇具有很好参考价值的文章主要介绍了JavaWeb_瑞吉外卖_项目优化Day10-Spring Cache。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Git管理现有项目

  • 提交步骤:
    1. 生成空仓库, 不要加任何文件
    2. 右键项目, add整个项目
    3. commit和push, push时添加远程仓库地址
  • 新建分支步骤:
    1. 在本地新建一个分支
    2. push

环境搭建

maven坐标

<!-- Redis -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

yml配置文件

spring:
  redis:
    host: localhost
    port: 6379
    # password:
    database: 0

配置类

@Configuration
public class RedisConfig extends CachingConfigurerSupport {

    @Bean
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
        RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();

        //默认的Key序列化器为:JdkSerializationRedisSerializer
        redisTemplate.setKeySerializer(new StringRedisSerializer()); // key序列化
        //redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer()); // value序列化
        redisTemplate.setConnectionFactory(connectionFactory);
        return redisTemplate;
    }
}

缓存短信验证码

  • 注入redis对象
    @Autowired
    private RedisTemplate redisTemplate;
    
  • 将验证码保存到redis, 有效期5分钟
    redisTemplate.opsForValue().set(phone, code, 5, TimeUnit.MINUTES);
    
  • 获取验证码, 登录成功后删除验证码
    // 从redis中获取保存的验证码
    Object codeInSession = redisTemplate.opsForValue().get(phone);
    // 登录成功则删除验证码
    redisTemplate.delete(phone);
    

缓存菜品数据

  • 获取缓存数据
    List<DishDto> dishDtoList = null;
    // 动态构造key
    String key = "dish_"+dish.getCategoryId()+"_"+dish.getStatus();
    
    // 先从redis中获取缓存数据
    dishDtoList = (List<DishDto>) redisTemplate.opsForValue().get(key);
    if(dishDtoList != null){
        // 如果存在, 直接返回, 无需查询数据库
        return R.success(dishDtoList);
    }
    
    ... 
    
    // 将查询到的菜品数据缓存到redis
    redisTemplate.opsForValue().set(key, dishDtoList);
    
  • 删除缓存数据
    // 清理所有菜品的缓存数据
    // Set keys = redisTemplate.keys("dish_*");
    // redisTemplate.delete(keys);
    
    // 清理某个分类下的菜品缓存数据
    String key = "dish_"+dishDto.getCategoryId()+"_1";
    redisTemplate.delete(key);
    

Spring Cache

介绍

  • Spring Cache是一个框架,实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存功能。
  • Spring Cache提供了一层抽象,底层可以切换不同的cache实现。具体就是通过CacheManager接口来统一不同的缓存技术。
  • CacheManager是Spring提供的各种缓存技术抽象接口。
  • 针对不同的缓存技术需要实现不同的CacheManager:
    CacheManager 描述
    EhCacheCacheManager 使用EhCache作为缓存技术
    GuavaCacheManager 使用Google的GuavaCache作为缓存技术
    RedisCacheManager 使用Redis作为缓存技术

常用注解

注解 功能
@EnableCaching 开启缓存注解功能
@Cacheable 在方法执行前spring先查看缓存中是否有数据, 如果有数据, 则直接返回缓存数据; 若没有数据, 调用方法并将方法返回值放到缓存中
@CachePut 将方法的返回值放到缓存中
@CacheEvict 将一条或多条数据从缓存中删除
  • 在SpringBoot项目中, 使用缓存技术只需要在项目中导入相关缓存技术的依赖包, 并在启动类上使用@EnableCaching开启换成支持即可
  • 例如, 使用Redis作为缓存技术, 只需要导入Spring data Redis的maven坐标即可

使用方式

maven依赖

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

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

设置缓存有效期

cache:
  redis:
    time-to-live: 1800000 # 设置缓存有效期 

注解

@CachePut(value = "userCache", key = "#user.id")
@CacheEvict(value = "userCache", key = "#user.id")
@Cacheable(value = "userCache", key = "#id", unless = "#result == null")
@Cacheable(value = "userCache", key = "#user.id+'_'+#user.name", unless = "#result == null")

注: @Cacheable的condition属性不能使用#result

缓存套餐数据

@CacheEvict(value = "setmealCache", allEntries = true)
public R<String> save(@RequestBody SetmealDto setmealDto)
@Cacheable(value = "setmealCache", key = "#setmeal.categoryId+'_'+#setmeal.status")
public R<List<Setmeal>> list(Setmeal setmeal)

来源

黑马程序员. 瑞吉外卖项目文章来源地址https://www.toymoban.com/news/detail-546495.html

到了这里,关于JavaWeb_瑞吉外卖_项目优化Day10-Spring Cache的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【SpringBoot项目】SpringBoot项目-瑞吉外卖【day03】分类管理

    🌕博客x主页:己不由心王道长🌕! 🌎文章说明:SpringBoot项目-瑞吉外卖【day03】分类管理🌎 ✅系列专栏:SpringBoot项目 🌴本篇内容:对黑马的瑞吉外卖项目的day03进行笔记和项目实现🌴 ☕️每日一语:生活不可能像你想象得那么好,但也不会像你想象得那么糟。☕️ 🚩

    2024年02月22日
    浏览(39)
  • Spring Boot实训项目 瑞吉外卖功能实现

    1 实训基本信息 1.1 实训项目名称 “外卖点餐”系统。 1.2 实训时间及地点 2 实训内容简介 本项目(“外卖点餐”系统)是专门为餐饮企业(餐厅、饭店)定制的-款软件产品,包括系统管理后台和移动端应用两部分。 其中系统管理后台主要提供给餐饮企业内部员工使用,可以对餐

    2024年02月07日
    浏览(57)
  • 瑞吉外卖-Day01

    软件开发整体介绍 瑞吉外卖项目介绍 开发环境搭建 后台登录功能开发 后台退出功能开发 作为一名软件开发工程师,我们需要了解在软件开发过程中的开发流程, 以及软件开发过程中涉及到的岗位角色,角色的分工、职责, 并了解软件开发中涉及到的三种软件环境。那么这

    2024年02月12日
    浏览(32)
  • 瑞吉外卖day1

    本项目(瑞吉外卖)是专门为餐饮企业(餐厅、饭店)定制的一款软件产品,包括系统管理后台和移动端应用两部分。其中系统管理后台主要提供给餐饮企业内部员工使用,可以对餐厅的菜品、套餐、订单等进行管理维护。移动端应用 心 主要提供给消费者使用,可以在线浏

    2024年02月03日
    浏览(39)
  • 瑞吉外卖day4

    介绍  服务端要接收客户端页面上传的文件,通常都会使用Apache的两个组件 1.commons-file upload 2.commons-io Spring框架在spring-web包中对文件上传进行了封装。只需要在Controller的方法中声明一个MultipartFile类型的参数即可接受上传的文件 代码实现 upload方法里的形参名要保证与前端提

    2024年02月04日
    浏览(43)
  • 瑞吉外卖项目——瑞吉外卖

    需求分析:产品原型、需求规格说明书 设计:产品文档、UI界面设计、概要设计、详细设计、数据库设计 编码:项目代码、单元测试 测试:测试用例、测试报告 上线运维:软件环境安装、配置 项目经理:对整个项目负责,任务分配、把控进度 产品经理:进行需求调研,输

    2023年04月26日
    浏览(90)
  • 项目笔记-瑞吉外卖(全)

    1.对后端返回请求值的分析 2.对不同种请求参数的分析 3.事务管理 1.软件开发整体介绍 2.项目整体介绍⭐️ 后端:管理菜品和员工信息 前台:通过手机端,可以浏览菜品和添加客户端 开发项目流程: 实现基本需求,用户能在手机浏览器访问 对移动端应用改进,使用微信小程

    2024年02月07日
    浏览(39)
  • 瑞吉外卖项目——前后端分离

    前后端分离开发,就是在项目开发过程中,对于前端代码的开发由专门的 前端开发人员 负责,后端代码则由 后端开发人员 负责,这样可以做到分工明确、各司其职,提高开发效率,前后端代码并行开发,可以加快项目开发进度。 目前,前后端分离开发方式已经被越来越多

    2023年04月20日
    浏览(46)
  • 瑞吉外卖项目记录

    本文为个人学习黑马《瑞吉外卖》项目后进行的项目总结,更偏向于对自己编写文本能力的锻炼以及对项目知识点的简短记录。因为个人能力问题,其中可行性分析和测试部分只进行了小标题的陈列,并没有进行编辑。对《瑞吉外卖》项目感兴趣的朋友也可以浏览本文后再去

    2024年02月05日
    浏览(32)
  • springboot项目外卖管理 day08-缓存优化

    导入maven坐标 在项目的pom.xm1文件中导入spring data redis的maven坐标: 配置yml文件 在项目的application.yml中加入redis相关配置: 设置序列化器,编写配置类 在项目中加入配置类RedisConfig: 也可以用StringRedisTemplate就不用配置类 实现思路 前面我们已经实现了移动端手机验证码登录,随机

    2024年02月12日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包