java中的锁的使用

47 篇文章 0 订阅
41 篇文章 0 订阅

前言:java 中有许多锁,可以丰富的实现我们需要的各种业务场景,总结如下:

1.悲观锁

实现方式:在该事务的第一个查询sql的最后添加 for update;
应用场景:写入数据量大,读取数据量少的情况;
锁级别:where 后明确指定主键,row lock;
where后明确指定主键,查询数据为null,没有锁;
where后没有指定主键,table lock;

2.乐观锁

实现方式:在该条数据中加version字段,记录操作的次数,当前用户获取version,然后将操作数据及version+1 保存到数据库时,发现version不为原值,取消本次操作,(即,谁快,谁优先操作);
应用场景:读取数据量大,写入数据量少的情况;
锁级别:row lock;

3.分布式锁

实现方式:
redis、zoomkeeper、数据库都能够实现,这里推荐使用redis分布式锁;
redis分布式锁
具体实现https://blog.csdn.net/leinminna/article/details/101155733
应用场景:争对跨系统、网络异常导致的数据不一致问题
锁级别:锁的粒度不同而不同,可以自由调节,可以是rowLock,也可以式table lock,也可以是某个状态的锁;
redis分布式锁,也是一种乐观锁;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值