论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行级锁和表级锁的区别
表级锁:开销小,加锁快:不会出现死锁:锁定粒度大,发生锁冲突的概率最高,并发度最低:行级锁:开销大,加锁慢:会出现死锁:锁定粒度最小,发生锁冲突的概率最低,并发度也最高:
随机推荐
- python核心高级学习总结2----------pdb的调试
PDB调试 def getAverage(a,b): result =a+b print("result=%d"%result) return result a=100 b=200 ...
- sql black list 绕过
Black list is so weak for you,isn't it 姿势: return preg_match("/set|prepare|alter|rename|select| ...
- jarvisoj flag在管理员手上
jarvisoj flag在管理员手上 涉及知识点: (1)代码审计和cookie注入 (2)哈希长度拓展攻击 解析: 进入题目的界面.看到 那么就是想方设法的变成admin了.挂上御剑开始审计.发现 ...
- java中的反射(三)
目录 一.反射 1.class类 2.访问字段 3.调用方法 4.调用构造方法 5.获取继承对象 6.动态代理 二.sping中的反射 本篇转自:https://depp.wang/2020/05/0 ...
- Go微服务实践之增删改查
从此篇文章开始,我们来陆续介绍 go-zero 开发一个项目所需要的组件和开发实践. 首先我们从 model 层开始,来说说go-zero 的API以及封装细节.首先 model 层连接的API集中在 ...
- 串口数据监视-Bus Hound
Bus Hound使用说明 一.打开该工具,会看到最上面的六个图标:1.Capture(捕捉按钮):按下它选择捕捉数据界面2.Save(保存按钮):按下它选择保存数据界面3.Setting(设置按钮) ...
- CentOS 6.8内核版本升级
1.查看当前版本 [root@www.linuxidc.com docker]# cat /etc/issue CentOS release 6.8 (Final) Kernel \r on an ...
- 页面上下载canvas中的内容作为图片
使用如下代码,获得Canvas图像对应的data URI,也就是平常我们所说的base64地址 var dataUrl = document.getElementById("canvasId ...
- Day10 python高级特性-- 生成器 Generator
列表生成式可以创建列表,但是受内存限制,列表容量时有限的,创建一个巨量元素的列表,不仅占用很大的存储空间,当仅仅访问前几个元素时,后面的绝大多数元素占用的空间都被浪费了. 如果list的元素可以按照算 ...
- Jmeter对数据库做压力测试
一.环境:apache-jmeter-5.0,Oracle11g.windows7.jdk1.8.ojdbc14-10.2.0.2.0.jar二.操作配置:2.1.启动Jmeter Jmeter初始化 ...