当前位置: 首页 > news >正文

乐观锁和悲观锁 面试题

Mysql的乐观锁和悲观锁 

实现方式加锁时机常见的调用方式优势不足适用场景
乐观锁开发自定义更新数据的时候sql语句中进行version的判断高并发容易出现不一致的问题高并发读,少写
悲观锁Mysql内置查询数据的开始select * for update保证一致性低并发互联网高并发场景极少使用了,多见于某些产品内置的数据库系统

乐观锁

  顾名思义,总是一副乐天派的样子。每次读取数据时都很乐观,认为绝不会产生并发问题(不会有其他线程对数据进行修改)。因此,一般也不会上锁。只有在更新数据时才会去判断其他线程在此期间有没有对数据进行修改。

  若未修改,则操作成功;若数据已经发生了变化则表明期间有被修改,则事务回滚并错误提示给用户端。

  简单理解:别想太多,你尽管用,出问题了算我怂,大不了操作失败后事务回滚、提示用户!!!

  常见的实现机制为“版本号控制”,简化版的实现思路如下:

    • 读取记录时,获取当前version
    • 更新时,带上这个version
    • 执行更新时, set version = newVersion where version = oldVersion
    • 如果version不对,则更新失败,事务回滚
update table set name = 'Aron', version = version + 1 where id = #{id} and version = #{version};  

悲观锁

  顾名思义,总是假设最坏的情况。每次读取数据时都认为其他线程会同时修改数据,所以每次读取都会加(悲观)锁。

  一旦加锁,不同线程同时执行时只能有一个线程执行成功,其他的线程在入口处等待,直到锁被释放。

  常见的应用有:

    • MySQL的读锁、写锁、行锁等
    • Javasynchronized关键字

    

分类: MySQL

 乐观锁, MySQL, 悲观锁

 

http://www.lryc.cn/news/42792.html

相关文章:

  • 【Autoware规控】mpc_follower模型预测控制节点
  • 成果VR虚拟3D展厅让内容更丰富饱满
  • 【CE进阶】lua脚本使用
  • 【vue2】近期bug收集与整理02
  • 2. 01背包问题
  • 【Docker】CAdvisor+InfluxDB+Granfana容器监控
  • k8s 部署nginx 实现集群统一配置,自动更新nginx.conf配置文件 总结
  • 动态内存管理(上)——“C”
  • GPT-4发布,这类人才告急,大厂月薪10W+疯抢
  • MySQL数据库实现主主同步
  • JavaScript传参的6种方式
  • 蓝桥之统计子矩阵
  • Java的基础面试题
  • J1939故障码诊断说明
  • XCPC第十三站,贪心问题
  • 一文让你吃透 Vue3中的组件间通讯 【一篇通】
  • EVE遭遇大规模DDOS攻击,玩家和官方都傻眼了
  • 【数据结构】二叉树及相关习题详解
  • 锂电池充电的同时也能放电吗?
  • 通信工程考研英语复试专有名词翻译
  • 注意力机制(四):多头注意力
  • 【2023Unity游戏开发教程】零基础带你从小白到超神19——射线检测
  • 内存泄漏和内存溢出的区别
  • 文本三剑客之sed编辑器
  • 深度学习:GPT1、GPT2、GPT-3
  • 使用Docker 一键部署SpringBoot和SpringCloud项目
  • 【数据结构】用栈实现队列
  • [Netty源码] 服务端启动过程 (二)
  • Week 14
  • 【微信小程序】-- 使用 Git 管理项目(五十)