黑马程序员技术交流社区

标题: 【广州校区】+【原创】+使用mysql的更新锁解决集群环境下... [打印本页]

作者: 小李哥    时间: 2019-6-13 14:00
标题: 【广州校区】+【原创】+使用mysql的更新锁解决集群环境下...
使用mysql的更新锁解决集群环境下重复调度的问题
如果应用程序有定时调度任务,在集群环境下,多个应用有多个调度任务。方法重复调度的情况出现。这时我们可以使用mysql的行锁来解决这个问题。
更新锁其实就可以看成排他锁的一种变形,只是它也允许其他人读。但不允许其他对这条数据的更新,删除操作,除非我释放了更新锁。下一个才能执行更新删除操作。
建表语句:
CREATE TABLE `log_table` (
  `SEQ_NAME` varchar(50) NOT NULL,
  `VERSION` smallint(6) NOT NULL DEFAULT '1',
  `REMARK` varchar(100) NOT NULL DEFAULT '',
  PRIMARY KEY (`SEQ_NAME`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
实现思路可以利用log_table中的version做版本控制。当初始化version为1.
代码实现思路,
1.     从数据库找出表log_table中的version为1.
2.     使用mysql的更新锁,update log_table set version=version+1 where version=变量值 and seq_name=‘xxx‘(version=1)
3.     当更新语句执行成功返回更新行数,判断是否大于0.决定是否往下执行业务代码。
当集群应用同时执行第一步,取到version=1.当进行到第二步利用mysql的行锁控制,只要有一个应用程序执行第二步成功之后,集群的其他应用程序根据version=1 and seq_name=’xxxx’ 的条件就找不到相对应的数据.利用数据库的特性解决了重复调度问题。






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2