Mysql 乐观锁和悲观锁

本文探讨了乐观锁和悲观锁的基本概念及应用场景。乐观锁通常利用CAS算法实现,适用于并发冲突较少的情况;悲观锁则假设冲突频繁发生,通过加锁机制确保数据一致性。此外,还介绍了分布式锁的实现方式,如Redis的SETNX命令和Zookeeper的节点管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

乐观锁

假定每次操作都不会产生冲突,一般使用cas进行解决。

update xxx set num=num+1 where num = xxx and name = xxx

悲观锁

假定每次操作都会冲突,都需要加锁解决。

select * for update
结果集中的任何行数据使用排他锁或共享锁,否则申请会阻塞

for update仅适用于InnoDB,且必须在事务块(BEGIN/COMMIT)中才能生效。在进行事务操作时,通过“for update”语句,MySQL会对查询结果集中每行数据都添加排他锁,其他线程对该记录的更新与删除操作都会阻塞。排他锁包含行锁、表锁。

分布式锁

redis:setnx + del
zookeeper:生成目录节点下的有序id,性能不够

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值