缓存优化:手机验证码优化

image.png
image.png
上面的步骤少了在项目的application.yml中加入redis相关配置

  1. redis:
  2. host: 192.168.78.128
  3. port: 6379
  4. database: 0
  5. jedis:
  6. pool:
  7. max-active: 10
  8. max-idle: 5
  9. # password:

引入上述依赖时,需要注意yml文件前面的缩进,上述配置应该配置在spring层级下面。
关键在于:
1.image.png
2.image.png
3.image.png
4.image.png

缓存菜品数据

image.png
image.png
关键在于:
1.image.png
2.image.png
3.image.png
菜品增删改清理缓存:
当对菜品进行增删改的时候,redis缓存还是原来的数据,所以在业务层对菜品数据进行增删改后,加入代码清空缓存image.png,放在返回值的前面。

SpringCache

Spring Cache是一个框架,实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存功能,大大简化我们在业务中操作缓存的代码。
springCache底层原理:不使用任何缓存技术时,存的是在java内存中,存储的结构是concurrentHaspMap。

注解

image.png
1.首先需要导入redis和SpringCache依赖:

<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>

2.配置

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

SpringCache对缓存设置过期时间只能一起设置,不能单个设置,这是SpringCache的弊端,会出现缓存雪崩。
3.在启动类上加入@EnableCaching注解,开启SpringCache注解方式

@CachePut——不常用,因为@Cacheable中有

将方法返回值写入缓存
写入缓存名字的格式:”cacheNames::key”
image.png
key的写法如下:
#user.id : #user指的是方法形参的名称, id指的是user的id属性 , 也就是使用user的id属性作为key ;
#user.name: #user指的是方法形参的名称, name指的是user的name属性 ,也就是使用user的name属性作为key ;
#result.id : #result代表方法返回值,该表达式 代表以返回对象的id属性作为key ;
#result.name : #result代表方法返回值,该表达式 代表以返回对象的name属性作为key ;

@Cacheable——用在Get请求,一般写在业务层更好

如果缓存有数据直接返回不调用方法,否则调用方法并将返回值写入缓存
value:缓存的名称,每个缓存名称下面可以有多个key
key:缓存的key
image.png
关键记得写:unless=”#result==null”,当返回值不为空时写入缓存。

@CacheEvict注解——用于增删改

作用: 清理指定缓存
value: 缓存的名称,每个缓存名称下面可以有多个key
key: 缓存的key
8528502570730d4ad960e9219804166.png
这里的cacheNames也可以用value来代替image.png
注意:@Cacheable和@CacheEvicet起的缓存名字要一直,才能进行写入缓存和清理缓存。