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

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

开发者学堂课程【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个数量级,取其中单个耗时较长即可。

相关文章
关于死锁的原因及解决方案
关于死锁的原因及解决方案
168 0
|
14天前
|
数据库连接 数据库 数据库管理
如何避免数据库死锁?
【10月更文挑战第28天】
39 14
|
3月前
|
SQL 数据库 开发者
SQL事务处理与并发控制:保障数据一致性的关键——深入探索ACID原则、锁定与乐观并发控制策略,以及高级事务管理技巧
【8月更文挑战第31天】在数据库管理和应用开发中,确保数据一致性至关重要。SQL事务处理和并发控制是实现这一目标的关键技术,它们保证了多用户同时访问和修改数据时数据库的一致性和准确性。事务处理遵循ACID原则(原子性、一致性、隔离性和持久性),并发控制则通过锁定和乐观并发控制等策略管理多用户访问,防止数据冲突。本文将深入探讨这些技术的原理与应用,帮助开发者更好地保护数据。
50 0
|
5月前
|
SQL 安全 关系型数据库
MySQL数据库——事务-简介、事务操作、四大特性、并发事务问题、事务隔离级别
MySQL数据库——事务-简介、事务操作、四大特性、并发事务问题、事务隔离级别
85 1
|
关系型数据库 MySQL 数据库
MySQL数据库中的事务机制与锁机制
MySQL数据库中的事务机制与锁机制。
99 2
|
6月前
|
SQL 关系型数据库 MySQL
MySQL事务原理分析(ACID特性、隔离级别、锁、MVCC、并发读异常、并发死锁以及如何避免死锁)
MySQL事务原理分析(ACID特性、隔离级别、锁、MVCC、并发读异常、并发死锁以及如何避免死锁)
161 1
|
设计模式
【并发技术04】线程技术之死锁问题
【并发技术04】线程技术之死锁问题
|
存储 缓存 Java
每日一博 - 常见的Spring事务失效&事务不回滚案例集锦
每日一博 - 常见的Spring事务失效&事务不回滚案例集锦
164 0
|
SQL 关系型数据库 MySQL
当出现mysql死锁的情况下,应该怎么确认是那个业务中的事务出现了死锁呢
当出现mysql死锁的情况下,应该怎么确认是那个业务中的事务出现了死锁呢
130 0