论JAVA实现MYSQL 行级锁(分布式锁实现方案一)
@Override
@Transactional
public String getCustomerId() {
// return String.valueOf(getSequenceId(SEQ_CUSTOMER_ITEM_CODE.seqName));
String type=SEQ_CUSTOMER_ITEM_CODE.seqName; if (!sequenceValueMap.containsKey(type)) {
SequenceDO sequenceDO = sequenceDOMapper.getBySeqNameForUpdate(type);
LOGGER.info(Thread.currentThread().getName()+"===="+sequenceDO.getCurrentValue());
sequenceValueMap.put(type, sequenceDO);
//更新值
int value = sequenceDO.getCurrentValue();
sequenceDOMapper.updateSequenceValue(type, sequenceDO.getCurrentValue() + sequenceDO.getStep());
sequenceDO.setCurrentValue(value + 1);
LOGGER.info(Thread.currentThread().getName()+"----------->CurrentSequenceType:[{}],value:[{}]", type, sequenceDO.getCurrentValue()); return sequenceDO.getCurrentValue()+"";
} else {
SequenceDO sequenceDO = sequenceValueMap.get(type);
int value = sequenceDO.getCurrentValue() + 1;
if (value % sequenceDO.getStep() == 0) {
//更新值
SequenceDO temp = sequenceDOMapper.getBySeqNameForUpdate(type);
LOGGER.info(Thread.currentThread().getName()+"----------->CurrentSequenceType:[{}],value:[{}]", type, temp.getCurrentValue());
sequenceDOMapper.updateSequenceValue(type, temp.getCurrentValue() + temp.getStep());
sequenceValueMap.put(type, temp);
} else {
sequenceDO.setCurrentValue(value);
}
return value+"";
}
}
使用行级锁 一定要注意 加上事务控制 MYSQL 行级锁才会起效,才会以排他的形式 访问
-12-26 20:03:20.562 INFO 39993---[Thread-22] c.s.m.s.i.SequenceServiceImpl - Thread-22====100198439
2019-12-26 20:03:20.572 INFO 39993---[Thread-22] c.s.m.s.i.SequenceServiceImpl - Thread-22----------->CurrentSequenceType:[sequenceCustomerInfo],value:[100198440]
2019-12-26 20:03:20.577 INFO 39993---[ZkClient-EventThread-23-127.0.0.1:2181] o.I.z.ZkEventThread - Terminate ZkClient event thread.
2019-12-26 20:03:20.580 INFO 39993---[Thread-23] c.s.m.s.i.SequenceServiceImpl - Thread-23====100198440
2019-12-26 20:03:20.581 INFO 39993---[DubboShutdownHook] o.a.z.ZooKeeper - Session: 0x100048539830052 closed
2019-12-26 20:03:20.581 INFO 39993---[main-EventThread] o.a.z.ClientCnxn - EventThread shut down
100198440
2019-12-26 20:03:20.589 INFO 39993---[Thread-23] c.s.m.s.i.SequenceServiceImpl - Thread-23----------->CurrentSequenceType:[sequenceCustomerInfo],value:[100198441]
论JAVA实现MYSQL 行级锁(分布式锁实现方案一)的更多相关文章
- mysql 行级锁的使用以及死锁的预防
一.前言 mysql的InnoDB,支持事务和行级锁,可以使用行锁来处理用户提现等业务.使用mysql锁的时候有时候会出现死锁,要做好死锁的预防. 二.MySQL行级锁 行级锁又分共享锁和排他锁. 共 ...
- mysql行级锁 select for update
mysql行级锁 select for update 1.属于行级锁 2.where条件后需要写出明确的索引条件(如果有多个条件,可以建立联合索引) 3.如果其所在的事务提交或者回滚后,或者更新该条数 ...
- MySQL行级锁,表级锁,页级锁详解
页级:引擎 BDB. 表级:引擎 MyISAM , 理解为锁住整个表,可以同时读,写不行 行级:引擎 INNODB , 单独的一行记录加锁 表级,直接锁定整张表,在你锁定期间,其它进程无法对该表进行写 ...
- MySQL行级锁、表级锁、页级锁详细介绍
原文链接:http://www.jb51.net/article/50047.htm 页级:引擎 BDB.表级:引擎 MyISAM , 理解为锁住整个表,可以同时读,写不行行级:引擎 INNODB , ...
- MySQL行级锁和表级锁
锁定用于确保事务完整性和数据库一致性. 锁定可以防止用户读取其他用户正在更改的数据,并防止多个用户同时更改相同的数据. 如果不使用锁定,数据库中的数据可能在逻辑上变得不正确,而针对这些数据进行查询可能 ...
- 你真的会用mysql行级锁吗?mysql 行级锁全解析
在互联网大并发应用大行其道的今天,应用的开发总是离不开锁,在分布式应用中,最常见的莫过于基于数据库的行级锁了,由于互联网公司中比较主流的数据库还是mysql,所以这一话题绕不开的就是mysql了,但是 ...
- [MySQL] 行级锁SELECT ... LOCK IN SHARE MODE 和 SELECT ... FOR UPDATE
一.译文 翻译来自官方文档:Locking Reads If you query data and then insert or update related data within the same ...
- mysql 行级锁问题
线上碰到存储过程死锁问题了,开始以为非主键查询 for update 会导致表锁,后来经过测试 innodb下for update索引生效的情况下 根据索引字段查询是行级锁,会将整个结果集进行上锁,直 ...
- mysql行级锁和表级锁的区别
表级锁:开销小,加锁快:不会出现死锁:锁定粒度大,发生锁冲突的概率最高,并发度最低:行级锁:开销大,加锁慢:会出现死锁:锁定粒度最小,发生锁冲突的概率最低,并发度也最高:
随机推荐
- 再见!【JAVA GUI】
1.GUI概述 图形用户界面(Graphical User Interface,简称 GUI,又 称图形用户接口)是指采用图形方式显示的计算机操作用户界面. java作为一种面向对象的程序设计语言,它 ...
- day1(Django路径问题)
1.python中的三种路径 1.1 操作系统文件绝对路径 django 静态文件查找, 模板查找(第一种) # 去配置好的 文件夹 中查找指定的文件 BASE_DIR = os.path.dirna ...
- XSS漏洞防御之HttpOnly
WWW服务依赖于Http协议实现,Http是无状态的协议,所以为了在各个会话之间传递信息,就需要使用Cookie来标记访问者的状态,以便服务器端识别用户信息. Cookie分为内存Cookie和硬盘C ...
- numpy 中的堆叠 stack
参考: https://blog.csdn.net/Riverhope/article/details/78922006 vstack,vertical 垂直堆叠 hstack, horizontal ...
- js监测页面是否切换到后台
最近做个弹幕,用的是第三方的插件,在浏览器页面切换到后台,返回后发现数据有堆叠卡死的情况,如何解决这个问题?网上参考了些demo,大致可以实现 1.document.hidden( Boolean值, ...
- jquery 执行a 标签 点击事件 跳转href 路径
<a href="./export.pdf" id="pdfdown" download="文件名.pdf">下载</a& ...
- 一、Nginx笔记--linux下载安装部署Nginx
Nginx 到底是什么? Nginx 是⼀个⾼性能的HTTP和反向代理web服务器,核⼼特点是占有内存少,并发能⼒强 Nginx ⼜能做什么事情(应⽤场景) Http服务器(Web服务器) 性能⾮常 ...
- pymysql出现的问题
pymysql的使用bug 每次执行sql语句(增删改查)必须commit提交 当重复执行相同slq语句时,如果不commit,fetchall的结果会是上次执行的结果 或者打开pymysql的自动提 ...
- C++异常之六 异常处理的基本思想
异常处理的基本思想 C++的异常处理机制使得异常的引发和异常的处理不必在同一个函数中,这样低沉的函数可以着重解决具体问题,而不必过多的考虑异常的处理.上层调用者可以再适当的位置设计对不同类型异常的处理 ...
- 四、Jmeter安装插件
Jmeter安装插件方法和使用 1-下载Jmeter管理jar包 下载地址:https://jmeter-plugins.org/install/Install/ 2-点击下载 plugins-man ...