22、数据库的乐观锁和悲观锁是什么?怎么实现的?

数据库管理系统(DBMS)中的并发控制的任务是确保在多个事务同时存取数据库中同一数据时满足ACID原则。

乐观锁和悲观锁是并发控制主要采用的技术手段

1、悲观锁:假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作。在查询完数据的时候就把事务锁起来,直到提交事务。

实现方式:使用数据库中的锁机制

2、乐观锁:假设不会发生并发冲突,只在提交操作时检查是否违反数据完整性。在修改数据的时候把事务锁起来,通过version的方式来进行锁定。

实现方式:乐观锁一般会使用版本号机制或CAS算法实现。

3、两种锁的使用场景

从上面对两种锁的介绍,我们知道两种锁各有优缺点,不可认为一种好于另一种,像乐观锁适用于读多写少对场景,即冲突较少对场景,这样可以省去了锁的开销,加大了系统的整个吞吐量。

但如果是多写的情况,一般会经常产生冲突,这就会导致上层应用会不断的进行retry,这样反倒是降低了性能,所以一般多写的场景下用悲观锁就比较合适。

相关推荐
夜影风2 小时前
Redis集群创建时出现“Node xxx.xxx is not empty”问题处理
数据库·redis·缓存
utf8mb4安全女神2 小时前
【Redis数据库】哨兵集群/redis集群/安装配置/主从复制/数据持久化操作/数据结构/安全限制/PHP redis/
linux·服务器·数据结构·数据库·redis·缓存
lzz的编码时刻2 小时前
Liquibase 入门实战教程
数据库·运维开发
Zk.Sun3 小时前
Linux设置触屏双击距离容差
linux·运维·数据库
山峰哥4 小时前
数据库工程:Explain执行计划对比实战指南‌
数据库·sql·oracle·深度优先·宽度优先
crisps_ww4 小时前
自媒体运营分析-BI可视化仪表盘制作
数据库
Geek-Chow4 小时前
微服务认证与授权:01 — 概念
java·前端·数据库
烤代码的吐司君5 小时前
Redis IO 多路复用原理与引入原因深度解析
数据库·redis·php
韶博雅5 小时前
oracle密码策略检查
数据库·oracle
Database_Cool_6 小时前
单库瓶颈解决方案首选:阿里云 PolarDB-X 平滑替代分库分表
数据库·阿里云