java高并发带来的数据库死锁_【开卷故意】记录一次高并发下的死锁解决思考过程...

开卷故意,好久没写博客了,近期工作也挺忙的。

死锁距离我不遥远。最终还是在高并发时被我碰到了。

DeadLock Found!

虽然编程风格中会尽量避免死锁,可是还是被我碰上了。文章可能看不出来我在做什么事情。仅仅是记录自己的一个排除死锁的过程。

事情起源于两个联动的缓存+redis+异步数据库读写操作。

事务中的这句出现死锁:

DELETE FROM table WHERE FROM key = ‘helloworld’

当初的思考解除死锁的思路例如以下:

1)分析死锁模型,如果1,2 两个线程,如果A,B两个锁,通俗的说 :

1持有A锁。等待B锁 -- 2 持有B锁。等待A锁

于是掐这了,就瘫了。

2)继续思考,要真这么简单,也不好意思称自己project师了,实际开发中都是碰到死锁环。

什么意思呢?继续如果

1持有A。等B,

2持有B,等C,

3持有C。等A

Anyway,读者能够自己如果还有4。5,6。7...

3)继续思考,死锁出现,第一步肯定是重审自己的代码。这个时候一定要对使用的成熟的工具优先保持自信但要保留质疑的态度。怎么重审,记录我的过程

a,我们说代码越简洁,越不easy出错。所以,秉着DRY原则。也要消除反复的代码,能复用就绝对不看着行数而自得。

b。重构过后。一定是要数据层,逻辑层分离。不要在数据层包括逻辑处理。不要在逻辑层去做数

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值