SpringCache和SpringTask

作者 : admin 本文共1655个字,预计阅读时间需要5分钟 发布时间: 2024-06-8 共3人阅读

SpringCache

在启动类上加EnableCaching注解

我们只要在Controller上写一个SpringCache相应的注解

我们就能实现缓存了

简化缓存操作代码,提高我们的效率

SpringCache和SpringTask插图

我们默认是我们的spring做缓存

但我们还可以替换我们的缓存技术

例如

EhCache

Google

Redis

来作为缓存技术

 


我们是通过这个接口,CacheManager接口来实现的

SpringCache和SpringTask插图(1)


4个常用注解 

SpringCache和SpringTask插图(2)


有三个注解

Cacheput

CacheEvict

CacheEnable


使用Cacheput注解

我们添加缓存时使用

我们在这个Controller中

注入了我们的CacheManager对象

SpringCache和SpringTask插图(3)

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

SpringCache和SpringTask插图(4)

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

SpringCache和SpringTask插图(5)

 

可以存很多的缓存在一个value

然后我们有个key,来作为表示

SpringCache和SpringTask插图(6)

 #result

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

SpringCache和SpringTask插图(7)

#root

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

SpringCache和SpringTask插图(8)

拿到参数值

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

SpringCache和SpringTask插图(9)

 存储于内存

其实我们这个存储是基于内存的,重启服务后我们就没有了

使用CacheEvict注解

我们删除缓存的时候用

SpringCache和SpringTask插图(10)

#root.args[0]

 获得方法的第几个参数

SpringCache和SpringTask插图(11)

#p0

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

SpringCache和SpringTask插图(12)


使用CacheEnable

这个用在我们的查询方法上

查询之前看看我们有没有

SpringCache和SpringTask插图(13)

SpringCache和SpringTask插图(14)

存入空缓存

这个很吊,如果我们过来,然后我们查询数据库为空

condition

condition是满足什么条件的时候,我们才缓存

SpringCache和SpringTask插图(15)


 使用Spring内置语言的小问题

其实我们这里是不能使用Result的

SpringCache和SpringTask插图(16)

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

SpringCache和SpringTask插图(17)

SpringCache和SpringTask插图(18)

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

SpringCache和SpringTask插图(19)

所以我们可以使用unless,这个和condition相反

我们就可以使用#result了


技术换型,使用Redis

首先要引入我们的依赖

Spring-boot-starter-cache依赖

配置yml文件

SpringCache和SpringTask插图(20)

设置缓存有效期

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

SpringCache和SpringTask插图(21)

SpringCache和SpringTask插图(22)

我们这样就把我们底层缓存的产品换成了Redis


SpringTask

SpringTask是什么

springtask是spring框架的一个定时任务

是spring提供的任务调度工具,按照约定的时间自动执行某个代码逻辑

作用:定时自动执行某段java代码

例如闹钟


应用场景

信用卡提醒还贷

花呗提醒还款

火车票售票系统处理未支付订单

纪念日发送通知


Cron表达式

我们的springtask要写我们的cron表达式

定时任务触发

SpringCache和SpringTask插图(23)


什么是Cron表达式SpringCache和SpringTask插图(24)

 

通常

周和日是很难同时确定的,所以我们这两个

如果另一个确定了另一个就填写❓

但还是有问题,例如我们想要2月份的最后一天

是28还是29?

我们直接写的话肯定不好,会出错的

但是为了描述这种具体的细节呢,我们会有一些特殊的字符

我们没必要去手写我们的cron表达式,我们有cron表达式自动生成的网站

SpringCache和SpringTask插图(25)


入门案例

SpringCache和SpringTask插图(26)

添加EnableScheduling注解

在启动类上添加我们的EnableScheduling注解,开启我们的任务调度

我们的定时任务类上要加我们的Componet注解

这样我们才能成功使用Shceduled注解(写我们的Cron表达式)

然后定义我们的方法,我们的方法是void类,是没有返回值的

SpringCache和SpringTask插图(27)


需求分析(经典使用)

SpringCache和SpringTask插图(28)

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

SpringCache和SpringTask插图(29)

我们的订单不可能一直时派送状态

过了一定的时间我们要处理一下这个状态

SpringCache和SpringTask插图(30)

SpringCache和SpringTask插图(31)

SpringCache和SpringTask插图(32)

 

我们写sql语句,查出超时15分钟的订单,然后把订单状态设置成已经取消

plusMinute方法

LocalDateTime有个plusMinute方法,可以加减时间

为了防止日志同时输出,控制台很难观察

SpringCache和SpringTask插图(33)

SpringCache和SpringTask插图(34)

 修改程序启动时,我们的定时任务的启动时间

所以我们一个从1秒开始,5秒触发一次

一个从0秒开始,5秒触发一次

SpringCache和SpringTask插图(35)

SpringCache和SpringTask插图(36)

本站无任何商业行为
个人在线分享 » SpringCache和SpringTask
E-->