事务-死锁解决方案|学习笔记

简介: 快速学习事务-死锁解决方案

开发者学堂课程【Redis 入门到精通(进阶篇)事务-死锁解决方案】学习笔记与课程紧密联系,让用户快速学习知识

课程地址https://developer.aliyun.com/learning/course/765/detail/13436


事务-死锁解决方案

 

内容介绍

一、分布式锁的解决方案

二、分布式锁改良

三、分布式锁时间限定的注意事项

 

一、分布式锁的解决方案

1、业务场景

依赖分布式锁的机制,某个用户操作时对应客户端宕机,且此时已经获取到锁。如何解决?

首先分析原因,制定解决方案,但其存在风险点,若想平稳发展需录入系统等。

2、业务分析

(1)由于锁操作由用户控制加锁解锁,必定会存在加锁后未解锁的风险

(2)需要解锁操作不能仅依赖用户控制,系统级别要给出相应的保底处理方案

 

二、基于特定条件的事务执行—分布式锁改良

解决方案

使用 expire 为锁 key 添加时间限定,到时不释放,放弃锁。

1、expire lock-key second

2、pexpire lock-key milliseconds

举例:首先清空所有,设定数据 set name 123,获取执行权限sexnx lock-name 锁住,设入时限expire lock-name 20即可。若20秒用完后get name可释放掉del lock name删除即可。若没删除需要setnx lock-name,另一客户端需要获取执行,一直锁不住,锁时需加上expirelock-name 20秒的时限设入即可,以上即是通过锁的形式来控制操作。

 

三、分布式锁时间限定的注意事项

由于操作通常都是微妙或毫秒级,因此该锁定时间不宜设置过长,通常是根据具体的业务和数据获取的平均值来决定。

例如:

1、持有锁的操作最长执行时间127ms,最短执行时间7ms。

2、锁时间设定推荐:最大耗时×120%+平均网络延迟×110%。

3、如果业务最大耗时<<网络平均延迟,通常为2个数量级,取其中单个耗时较长即可。

相关文章
关于死锁的原因及解决方案
关于死锁的原因及解决方案
205 0
|
2月前
|
数据库连接 数据库 数据库管理
如何避免数据库死锁?
【10月更文挑战第28天】
89 14
|
7月前
|
SQL 安全 关系型数据库
MySQL数据库——事务-简介、事务操作、四大特性、并发事务问题、事务隔离级别
MySQL数据库——事务-简介、事务操作、四大特性、并发事务问题、事务隔离级别
123 1
|
8月前
|
Java
【Java多线程】分析线程加锁导致的死锁问题以及解决方案
【Java多线程】分析线程加锁导致的死锁问题以及解决方案
102 1
|
8月前
|
关系型数据库 MySQL 中间件
【MySQL实战笔记】07 | 行锁功过:怎么减少行锁对性能的影响?-02 死锁和死锁检测
【4月更文挑战第19天】在高并发环境下,死锁发生在多个线程间循环等待资源时,导致无限期等待。MySQL中,死锁可通过`innodb_lock_wait_timeout`参数设置超时或`innodb_deadlock_detect`开启死锁检测来解决。默认的50s超时可能不适用于在线服务,而频繁检测会消耗大量CPU。应对热点行更新引发的性能问题,可以暂时关闭死锁检测(风险是产生大量超时),控制并发度,或通过分散记录减少锁冲突,例如将数据分拆到多行以降低死锁概率。
227 1
|
8月前
|
SQL 关系型数据库 MySQL
MySQL事务原理分析(ACID特性、隔离级别、锁、MVCC、并发读异常、并发死锁以及如何避免死锁)
MySQL事务原理分析(ACID特性、隔离级别、锁、MVCC、并发读异常、并发死锁以及如何避免死锁)
202 1
|
存储 SQL Oracle
解析 MySQL 锁机制:共享锁、排它锁、间隙锁、意向锁等,保障数据安全与高并发的秘密武器
解析 MySQL 锁机制:共享锁、排它锁、间隙锁、意向锁等,保障数据安全与高并发的秘密武器
500 1
|
设计模式
【并发技术04】线程技术之死锁问题
【并发技术04】线程技术之死锁问题
|
SQL 关系型数据库 MySQL
当出现mysql死锁的情况下,应该怎么确认是那个业务中的事务出现了死锁呢
当出现mysql死锁的情况下,应该怎么确认是那个业务中的事务出现了死锁呢
138 0

热门文章

最新文章