关于悲观锁和乐观锁的区别(最直观理解)

简介:

悲观锁(Pessimistic Lock):

每次拿数据的时候都会担心会被别人修改(疑心重很悲观),所以每次在拿数据的时候都会上锁。确保自己使用的过程中不会被别人访问,自己使用完后再解锁。

期间需要访问该数据的都会等待。


乐观锁(Optimistic Lock):

每次拿数据的时候都完全不担心会被别人修改(心态好很乐观),所以每次在拿数据的时候都不会上锁。但是在更新数据的时候去判断该期间是否被别人修改过(使用版本号等机制),期间该数据可以随便被其他人读取。


两种锁各有优缺点,不能单纯的定义哪个好于哪个。乐观锁比较适合数据修改比较少,读取比较频繁的场景,即使出现了少量的冲突,这样也省去了大量的锁的开销,故而提高了系统的吞吐量。但是如果经常发生冲突(写数据比较多的情况下),上层应用不不断的retry,这样反而降低了性能,对于这种情况使用悲观锁就更合适。

目录
相关文章
|
存储 运维 Linux
【MinIO异常】Storage reached its minimum free drive threshold 的解决方案
【MinIO异常】Storage reached its minimum free drive threshold 的解决方案
1506 0
|
6月前
|
SQL 人工智能 运维
PolarDB分布式版 AI 助手正式上线:你的“数字DBA”已入职
PolarDB-X AI助手正式上线!基于大模型与MCP技能体系,深度集成于控制台,支持自然语言交互,覆盖故障诊断、性能优化、安全审计等30+运维场景,让分布式数据库运维更智能、高效、零门槛。
450 0
|
10月前
|
运维 Docker 容器
14-Docker-compose容器编排
Docker-Compose 是 Docker 官方开源工具,用于快速编排和管理多容器应用。通过编写 `docker-compose.yml` 文件定义服务关系,实现一键启停、构建、部署多个容器,简化了复杂应用的管理流程,提升开发运维效率。
217 0
|
Kubernetes 负载均衡 Ubuntu
Kubernetes安装详细教程 Ubuntu版
本教程基于Ubuntu 22.04配置Kubernetes环境,涵盖依赖安装、swap关闭、内核参数调整、containerd与Kubernetes组件安装、集群初始化及CNI网络插件部署等内容,并提供常见问题处理方法和相关工具推荐。
|
资源调度 JavaScript 前端开发
创建vue3项目步骤以及安装第三方插件步骤【保姆级教程】
这是一篇关于创建Vue项目的详细指南,涵盖从环境搭建到项目部署的全过程。
1279 1
|
监控 安全 网络安全
|
安全 5G 测试技术
5G的要求和主要性能指标 | 《5G移动无线通信技术》之六
这里对前面章节所述用例的要求加以总结,表达了5G主要性能指标(KPI)。
5G的要求和主要性能指标 | 《5G移动无线通信技术》之六
|
缓存 安全 应用服务中间件
nginx配置proxy_set_header
nginx配置proxy_set_header
|
SQL 算法 关系型数据库
sql调优之:字符集不一致导致的索引失效案例
生产上有一段sql,大概几百行,做的是inser into …select ;的操作,但是执行了一个多小时都出不来,正常情况下不会这么久,通过一步步定位,最后发现是其中某一段的join 特别慢导致的,后面对这段sql重点分析发现,这里的表竟然没有走索引,对于几十万以上的表之间的连接,若是没有索引那就是灾难性的,加不加索引就好比一个人力三轮与超跑的区别。
1544 0
sql调优之:字符集不一致导致的索引失效案例
|
Linux C语言
Linux安装FastDFS(图文解说详细版)
Linux安装FastDFS(图文解说详细版)
Linux安装FastDFS(图文解说详细版)