缓存优化:手机验证码优化
上面的步骤少了在项目的application.yml中加入redis相关配置
redis:
host: 192.168.78.128
port: 6379
database: 0
jedis:
pool:
max-active: 10
max-idle: 5
# password:
引入上述依赖时,需要注意yml文件前面的缩进,上述配置应该配置在spring层级下面。
关键在于:
1.
2.
3.
4.
缓存菜品数据
关键在于:
1.
2.
3.
菜品增删改清理缓存:
当对菜品进行增删改的时候,redis缓存还是原来的数据,所以在业务层对菜品数据进行增删改后,加入代码清空缓存,放在返回值的前面。
SpringCache
Spring Cache是一个框架,实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存功能,大大简化我们在业务中操作缓存的代码。
springCache底层原理:不使用任何缓存技术时,存的是在java内存中,存储的结构是concurrentHaspMap。
注解
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”
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
关键记得写:unless=”#result==null”,当返回值不为空时写入缓存。
@CacheEvict注解——用于增删改
作用: 清理指定缓存
value: 缓存的名称,每个缓存名称下面可以有多个key
key: 缓存的key
这里的cacheNames也可以用value来代替
注意:@Cacheable和@CacheEvicet起的缓存名字要一直,才能进行写入缓存和清理缓存。