【Redis | 第四篇】乐观锁&悲观锁

目录

一、什么是乐观锁&悲观锁?

[乐观锁(Optimistic Lock)](#乐观锁(Optimistic Lock))

[悲观锁(Pessimistic Lock)](#悲观锁(Pessimistic Lock))

二、乐观锁&悲观锁的工作原理

[2.1 乐观锁的实现机制](#2.1 乐观锁的实现机制)

[2.2 悲观锁的工作原理](#2.2 悲观锁的工作原理)

[2.3 对比](#2.3 对比)


一、什么是乐观锁&悲观锁?

乐观锁(Optimistic Lock)

乐观锁是一种并发控制策略 ,它假设在大多数情况下,多个事务/线程访问同一资源时不会发生冲突,因此在操作数据时不预先加锁,而是在提交更新时才检测是否有冲突发生。

悲观锁(Pessimistic Lock)

悲观锁则假设冲突总会发生 ,因此在操作数据前必须先获取锁,确保在整个操作期间其他事务无法修改数据。

二、乐观锁&悲观锁的工作原理

2.1 乐观锁的实现机制

1.版本号机制

sql 复制代码
-- 读取数据时获取版本号
SELECT id, name, version FROM products WHERE id = 1;
-- 假设返回 version = 1

-- 更新时检查版本号是否变化
UPDATE products 
SET name = 'new_name', version = version + 1 
WHERE id = 1 AND version = 1;

-- 如果更新行数为0,说明数据已被其他事务修改

2.CAS(Compare And Swap)

冲突检测逻辑:

读取时:获取变量的当前值 A

计算时:基于A计算出新值 B

提交时:使用CAS原子操作,检查变量是否仍为A

  • 是 → 原子性地更新为B,操作成功

  • 否 → 变量已被修改,操作失败

无需再加版本号,浪费内存空间

2.2 悲观锁的工作原理

代码层面的悲观锁:

java 复制代码
// Java synchronized 关键字
public synchronized void updateStock(Long productId, Integer quantity) {
    // 临界区代码
}

// ReentrantLock
private final ReentrantLock lock = new ReentrantLock();
public void updateStock(Long productId, Integer quantity) {
    lock.lock();
    try {
        // 临界区代码
    } finally {
        lock.unlock();
    }
}

2.3 对比

特性 乐观锁 悲观锁
加锁时机 提交更新时检测冲突 操作前先加锁
实现复杂度 较高,需要额外字段或机制 较低,依赖数据库或系统锁
并发性能 高(无锁开销) 低(锁竞争导致等待)
适用冲突频率 低冲突场景 高冲突场景
死锁风险 无死锁 可能发生死锁
数据一致性 最终一致 强一致

使用场景:

  • 冲突少、读多写少 → 优先选择乐观锁
  • 冲突多、写操作频繁 → 优先选择悲观锁
  • 强一致性要求 → 选择悲观锁
  • 高并发、高性能要求 → 选择乐观锁
相关推荐
渣渣盟3 分钟前
Flink 写入 Redis 实战:数据模型选型、连接池调优与常见坑
大数据·redis·flink
Wang's Blog31 分钟前
PostgreSQL笔记27: 双缓存架构下的内存管理与性能观测实践
笔记·缓存·postgresql
Wang's Blog35 分钟前
PostgreSQL笔记22: WAL日志与崩溃恢复原理
数据库·笔记·postgresql
陈聪.1 小时前
企业级 NoSQL 数据库 Redis 核心知识整理
数据库·redis·nosql
翼龙云_cloud1 小时前
腾讯云国际代理商:CDB数据库自动备份和异地灾备配置 从快照到跨区域恢复
运维·数据库·云计算·腾讯云
小屁孩你滑稽掉了1 小时前
prisma操作数据库的方法使用教程(简洁版)
数据库·node.js·prisma·fastify
WWJA王文举1 小时前
# STM32使用DMA后数据异常?可能不是DMA配置问题:从缓存、变量类型、时序到外设状态全面排查
stm32·嵌入式硬件·缓存
l1t2 小时前
利用DuckDB luajit插件和openblas库对表中数据做矩阵运算
数据库·线性代数·矩阵·duckdb
Elastic 中国社区官方博客2 小时前
Elasticsearch:什么是向量数据库?
大数据·运维·数据库·人工智能·elasticsearch·搜索引擎·ai
cspttty2 小时前
财务人员学数据分析考什么证
数据库