苍穹外卖(六) redis缓存解决数据库压力

二节 直接用代码操作redis缓存 

三, 四节 间接使用Spring Cache 注解完成redis缓存操作

可直接看三,四节

需要帮助理解注释 回去看第二节

 一.问题说明

苍穹外卖(六) redis缓存解决数据库压力_第1张图片

二. 实现思路

 通过Redis来缓存菜品数据, 减少数据库查询操作

苍穹外卖(六) redis缓存解决数据库压力_第2张图片

Redis简介

Redis是一个基于内存的key-value结构数据库。Redis 是互联网技术领域使用最为广泛的存储中间件

key-value结构存储: 

苍穹外卖(六) redis缓存解决数据库压力_第3张图片 

主要特点:

  • 基于内存存储,读写性能高
  • 适合存储热点数据(热点商品、资讯、新闻)
  • 企业应用广泛

Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库,官方提供的数据是可以达到100000+的QPS(每秒内查询次数)。它存储的value类型比较丰富,也被称为结构化的NoSql数据库。

NoSql(Not Only SQL),不仅仅是SQL,泛指非关系型数据库。NoSql数据库并不是要取代关系型数据库,而是关系型数据库的补充。

缓存逻辑分析:

  • 每个分类下的菜品保存一份缓存数据
  • 数据库中菜品数据有变更时清理缓存数据
  • dish_1 就代表一个 分类菜品

苍穹外卖(六) redis缓存解决数据库压力_第4张图片苍穹外卖(六) redis缓存解决数据库压力_第5张图片

原始从数据库中查询菜品代码如下:

苍穹外卖(六) redis缓存解决数据库压力_第6张图片 

修改后加入Redis代码

苍穹外卖(六) redis缓存解决数据库压力_第7张图片

测试:

创建缓存

 (1)

苍穹外卖(六) redis缓存解决数据库压力_第8张图片

(2)

苍穹外卖(六) redis缓存解决数据库压力_第9张图片

(3)

苍穹外卖(六) redis缓存解决数据库压力_第10张图片

(4)

(5) 

 再次测试, 无SQL 语句

苍穹外卖(六) redis缓存解决数据库压力_第11张图片

清理缓存

修改菜品, 删除菜品, 停售菜品  都要做类似工作

苍穹外卖(六) redis缓存解决数据库压力_第12张图片

 

三. 改进 : Spring Cache

介绍

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

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

  • EHCache
  • Caffeine
  • Redis(常用)

起步依赖:

常用注解

苍穹外卖(六) redis缓存解决数据库压力_第13张图片

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

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

@CachePut 说明:

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

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

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

在save方法上加注解@CachePut

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

苍穹外卖(六) redis缓存解决数据库压力_第14张图片

插入成功后我们看一下Redis中的缓存苍穹外卖(六) redis缓存解决数据库压力_第15张图片

@Cacheable 说明:

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

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

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

@CacheEvict 说明:

​ 作用: 清理指定缓存

苍穹外卖(六) redis缓存解决数据库压力_第16张图片 苍穹外卖(六) redis缓存解决数据库压力_第17张图片

四. 整体实现步骤 

  1. 导入Spring Cache和Redis相关maven坐标
  2. 在启动类上加入@EnableCaching注解,开启缓存注解功能
  3. 在用户端接口SetmealController的 list 方法上加入@Cacheable注解
  4. 在管理端接口SetmealController的 save、delete、update、startOrStop等方法上加入CacheEvict注解

你可能感兴趣的:(苍穹外卖总结,redis,数据库,缓存,算法,spring,spring,boot)