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秒触发一次