Lock is easy

锁有四种:表锁、行锁、乐观锁、悲观锁

MySql存储引擎:MyIsAm、InnDb(mysql占九成,其他占一成,主攻mysql)

表锁:公司中一张表可能有几亿条数据,数据量巨大,仅操作一条数据时,将整块表都锁上,所以一般情况不用表锁,太重了。

行锁:操作DB用的行锁,假设7亿条数据,就有7亿个行锁。

乐观锁:假设没有人和你抢锁,GBM内存中CAS(compare and swap 比较并交换),假设7亿条数据,对每条数据操控时,都会给sql后加入一个where条件,其中有个version字段,即我每进行一次update操作都会把这个version+1,当我每次操作的时候都会进行一个判断即where中version=某个值,当不等于时候,这条数据便无法操作,因为这条数据的version值有其他线程改掉了

悲观锁:互联网公司基本上不用,使用场景银行,因为对数据要求非常高,用乐观锁可能出问题,悲观锁不可能出问题,直接锁表,可以把悲观锁视为一个表锁,比如对于select语句,在其后加入一个for update,这样的话不管这个表有多少数据,同一时间有且仅有一个线程可以去操作这一张表,所以经常发生锁等待,悲观锁非常重,但数据一定不会出问题。

相关推荐
液态不合群2 小时前
【面试题】MySQL 三层 B+ 树能存多少数据?
java·数据库·mysql
李坤林3 小时前
Android Binder 详解(4) Binder 线程池
android·java·binder
代码方舟3 小时前
Java后端实战:构建基于天远手机号码归属地核验的金融级风控模块
java·大数据·开发语言·金融
困知勉行19853 小时前
springboot整合redis
java·spring boot·redis
颜淡慕潇3 小时前
深度解析官方 Spring Boot 稳定版本及 JDK 配套策略
java·后端·架构
中年程序员一枚3 小时前
Springboot报错Template not found For name “java/lang/Object_toString.sql
java·spring boot·python
知识分享小能手4 小时前
Ubuntu入门学习教程,从入门到精通,Ubuntu 22.04中的Java与Android开发环境 (20)
java·学习·ubuntu
南屿欣风4 小时前
FeignClient 踩坑:@FeignClient 同时配 value 和 url 的 “无效服务名” 问题
java
豆沙沙包?4 小时前
2026年--Lc329-735. 小行星碰撞(栈)--java版
java·开发语言
爆更小哇4 小时前
Selenium自动化测试函数全解析(二)
java·selenium·测试工具·自动化