Mysql 乐观锁和悲观锁

乐观锁

假定每次操作都不会产生冲突,一般使用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,性能不够

猜你喜欢

转载自blog.csdn.net/qq_17612199/article/details/80289372