SpringSchedule - 定时任务简介(二)

简介: SpringSchedule - 定时任务简介(二)

image.pngimage.pngimage.png


既然是关闭订单呢,我们这里就要牵扯到,MYSQL的行锁和表锁,我们会使用select * from .. for update,这种方式,其实for update是一种悲观锁,那后续演进我们也会演进成乐观锁的,大家可以从易到难,乐观锁在表中增加一个字段,然后它是一个version,version我们可以使用时间戳毫秒数,然后来进行一个判断,再决定这个值是否要更新,是否要回滚,那么for update呢,是一个悲观锁,但是虽说简单,还是有很多要注意的点,我们来看一下,首先我们要使用Innodb引擎,那在我们项目当中,都是使用的innodb引擎,然后继续看,for update在明确主键的时候,会产生行锁,如果主键不明确的话,会产生表锁,也是一个ROW-Level Lock,一个Table-Level的Lock。



image.png


例如我们mmall_product表,有id和name,id是产品的主键,name是产品的名称,首先是明确指定主键,并且有结果集的,那就是行锁select * from mmall_product where id = '66' for update; 我们主要看where id,id是明确的主键,并且我们产品表里有这个产品,也就代表着有结果集,那么他会产生一个行锁。



image.png


  • 明确指定主键,并且没有结果集,我们查一个id是-100的,id也是主键,但是呢没有结果集,不会上锁,也就是无lock,select * from mmall_product where id = -100 for update。

image.png


无主键看一下select * from mmall_product where name = 'phone' for update; name并不是主键,所以这个SQL语句会产生锁表,会把整个表锁住,所以我们在使用for update悲观锁的时候,这里一定是要注意的,如果一个不慎就会造成线上的故障。



image.png


  • 那主键不明确呢 select * from mmall_product where id <> 66 for update; 其实就是不等于,代表主键不明确,不等于66的主键,非常多,所以这个锁也会变成表锁,锁住整个表,那这个是主键不明确。

image.png

目录
相关文章
|
7月前
|
Java 调度 Spring
SpringBoot实现多线程定时任务动态定时任务配置文件配置定时任务
SpringBoot实现多线程定时任务动态定时任务配置文件配置定时任务
697 0
|
开发工具
Python----schedule模块关于定时任务的高级用法二
Python----schedule模块关于定时任务的高级用法二
589 1
|
1月前
|
监控 Java 调度
定时任务概述
定时任务概述
47 1
|
开发工具
Python----使用schedule模块可以非常简单地设置定时任务
Python----使用schedule模块可以非常简单地设置定时任务
1372 0
|
7月前
|
SQL Java 调度
SpringBoot使用@Scheduled定时任务录入将要过期任务数据
SpringBoot使用@Scheduled定时任务录入将要过期任务数据
145 0
|
7月前
|
消息中间件 安全 Java
一起来探究@Schedule定时任务在分布式产生的问题
一起来探究@Schedule定时任务在分布式产生的问题
410 0
|
7月前
|
XML Java 调度
SpringBoot中定时任务入门(@Scheduled )详解
SpringBoot中定时任务入门(@Scheduled )详解
1034 0
|
Java API 调度
ThreadPoolTaskScheduler轻量级多线程定时任务框架
面对一些小的功能需求点,如果需要非常灵活的进行处理定时任务处理,但是又因为你的需求需要使用到页面进行定时任务配置,显然使用Spring注解定时任务,无法满足你,这时你想到了xxl-job 或者 quezy等定时任务框架,但是过于繁琐,可能成本较大。那么本文将要解决你的问题
2361 0
|
JavaScript Java Spring
一张思维导图带你学会使用SpringBoot中的Schedule定时发送邮件
一张思维导图带你学会使用SpringBoot中的Schedule定时发送邮件
165 0
springboot工程如何设置定时任务详解(@Scheduled)以及cron表达式
springboot工程如何设置定时任务详解(@Scheduled)以及cron表达式