面试官:说说MySQL 中的悲观锁和乐观锁

锁机制的基本概念

  • 锁的作用:确保某一时刻只有一个线程执行操作,其他线程需等待。
  • 锁的适用性:主要针对写入操作,不适用于读取操作。

应用锁与数据库锁

  • 应用锁:通过编程语言特性实现,如 Java 的 Synchronized 和 Go 的 Mutex
  • 数据库锁:数据库层面提供,简化分布式架构。

悲观锁

  • 定义:显式锁,依赖 MySQL 的 InnoDB 存储引擎和事务机制。
  • 实现:通常与 select for update 语句相关,核心是 update 语句。
  • 示例
    begin;
    -- A操作
    select name from user where id = 1 for update;
    -- B操作
    commit;
    
  • 锁的持有和释放:通过事务的开始和提交控制。
  • 锁的范围:默认作用于具有唯一索引的数据行,无索引可能升级为表级锁。

乐观锁

  • 定义:基于数据并发冲突罕见的假设,不依赖数据库显式锁定。
  • 实现:通常通过版本号 version 来跟踪数据变更。
  • 示例
    select from user where id = 1;
    update user set name = #{name}, 
    version = version + 1 where id = 1 and version = 0;
    
  • 冲突处理:在提交更新前检查版本号,不一致则拒绝更新。

锁的优缺点

  • 悲观锁
    • 优点:有效处理并发事务中的冲突问题。
    • 缺点:可能影响并发性能。
  • 乐观锁
    • 优点:允许高并发执行,减少锁争用,提高吞吐量。
    • 缺点:需要应用层面处理冲突。

总结

  • MySQL 原生支持悲观锁,乐观锁通过应用逻辑实现。
  • 锁机制可以简化分布式架构,提高应用与数据库的协同效率。
  • 锁机制的选择应基于业务需求和性能考量。

其他考虑

  • 在高并发场景下,可能需要使用性能更优的解决方案,如 Redis。
  • 在常规业务场景中,MySQL 的锁机制通常足够应对需求。
  • 8
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值