SpringCache
在启动类上加EnableCaching注解
我们只要在Controller上写一个SpringCache相应的注解
我们就能实现缓存了
简化缓存操作代码,提高我们的效率

我们默认是我们的spring做缓存
但我们还可以替换我们的缓存技术
例如
EhCache
Redis
来作为缓存技术
我们是通过这个接口,CacheManager接口来实现的

4个常用注解

有三个注解
Cacheput
CacheEvict
CacheEnable
使用Cacheput注解
我们添加缓存时使用
我们在这个Controller中
注入了我们的CacheManager对象

我们在启动类上加了EnableCaching注解

我们在新增操作上写这个,然后value是这个缓存的名称

可以存很多的缓存在一个value下
然后我们有个key,来作为表示

#result
我们的key可以通过spring内置语言来写,#result,就是我们当前方法的返回值

#root
可以获取到当前的这个方法

拿到参数值
我们可以和参数名对应,然后来拿到它的参数值

存储于内存
其实我们这个存储是基于内存的,重启服务后我们就没有了
使用CacheEvict注解
我们删除缓存的时候用

#root.args[0]
获得方法的第几个参数

#p0
也可以用p0这种写法,指定时第几个参数

使用CacheEnable
这个用在我们的查询方法上
查询之前看看我们有没有


存入空缓存
这个很吊,如果我们过来,然后我们查询数据库为空
condition
condition是满足什么条件的时候,我们才缓存

使用Spring内置语言的小问题
其实我们这里是不能使用Result的

Cacheable()里面的condition能使用的内置对象只有root,和一些参数(这个参数有使用限制)


我们使用condition的时候,我们Spring内置对象不能使用返回结果#result

所以我们可以使用unless,这个和condition相反
我们就可以使用#result了
技术换型,使用Redis
首先要引入我们的依赖
Spring-boot-starter-cache依赖
配置yml文件

设置缓存有效期
我们可以直接在配置文件中,配置time-tolive来设置这个缓存的有效期


我们这样就把我们底层缓存的产品换成了Redis
SpringTask
SpringTask是什么
springtask是spring框架的一个定时任务
是spring提供的任务调度工具,按照约定的时间自动执行某个代码逻辑
作用:定时自动执行某段java代码
例如闹钟
应用场景
信用卡提醒还贷
花呗提醒还款
火车票售票系统处理未支付订单
纪念日发送通知
Cron表达式
我们的springtask要写我们的cron表达式
定时任务触发

什么是Cron表达式
通常
周和日是很难同时确定的,所以我们这两个
如果另一个确定了另一个就填写❓
但还是有问题,例如我们想要2月份的最后一天
是28还是29?
我们直接写的话肯定不好,会出错的
但是为了描述这种具体的细节呢,我们会有一些特殊的字符
我们没必要去手写我们的cron表达式,我们有cron表达式自动生成的网站

入门案例

添加EnableScheduling注解
在启动类上添加我们的EnableScheduling注解,开启我们的任务调度
、
我们的定时任务类上要加我们的Componet注解
这样我们才能成功使用Shceduled注解(写我们的Cron表达式)
然后定义我们的方法,我们的方法是void类,是没有返回值的

需求分析(经典使用)

我们一分钟检查一次,看看是否有超时订单

我们的订单不可能一直时派送状态
过了一定的时间我们要处理一下这个状态



我们写sql语句,查出超时15分钟的订单,然后把订单状态设置成已经取消
plusMinute方法
LocalDateTime有个plusMinute方法,可以加减时间
为了防止日志同时输出,控制台很难观察


修改程序启动时,我们的定时任务的启动时间
所以我们一个从1秒开始,5秒触发一次
一个从0秒开始,5秒触发一次

![]()