【鹅厂一面真题】数据库乐观锁和悲观锁以及redis分布式锁的区别和使用场景?

数字摄影与摄像中的图像信号处理器(ISP):流程与经典算法详解 图像信号处理器(Image Signal Processor, ISP)是现代数字成像系统(如智能手机、数码相机、网络摄像头等)中的核心组件,扮演着将图像传感器(如CMOS或CCD)捕获的原始光电信号转换为高质量、可供观看或进一步处理的数字图像的关键角色。在数字摄影和摄像的整个链路中,光线首先通过镜头(Lens)聚焦到图像传感器上,传感器将光信号转换为模拟电信号,随后经过模数转换(A/D转换)变为原始的数字图像信号。 阅读详情

1.40.1 面试考察重点

1. 面试官的考察目标

  • 锁机制理解:对各类锁实现原理的掌握程度
  • 场景适配:不同业务场景下的技术选型能力
  • 问题诊断:锁冲突问题的解决思路
  • 实战经验:实际应用中的权衡经验

2. 关键关注点

  • 实现原理:各类锁的底层工作机制
  • 性能影响:对系统吞吐量的影响
  • 数据一致:保证数据正确性的方式
  • 适用边界:各类锁的优缺点对比

由于篇幅限制,只能给大家展示小部分内容,

全套面试笔记及答案【点击此处】即可免费获取

1.40.2 面试核心知识点详解

在并发编程和分布式系统中,乐观锁、悲观锁、Redis 分布式锁 是常见的并发控制机制,它们的核心目标是 保证数据一致性 ,但实现方式、适用场景和优缺点差异显著。以下是详细对比和使用场景分析:

1.40.2.1 数据库乐观锁(Optimistic Lock)
  • 核心思想 :假设冲突很少发生(“乐观”),在提交更新时检查版本号或时间戳。
  • 实现方式 :
    • 使用版本号(version)字段或时间戳(timestamp)字段。
    • 更新时通过 WHERE 条件判断版本是否被修改。
  • 示例 :
UPDATE inventory SET stock = stock - 1, version = version + 1
WHERE product_id = 1001AND version = 1;

✅ 优点

  • 性能高 :避免长时间加锁,减少锁竞争。
  • 并发性强 :适合读多写少的场景。
  • 开销小 :仅在提交时进行版本校验。

❌ 缺点

  • 冲突处理复杂 :若冲突频繁,需重试或报错。
  • 无法保证绝对一致性 :依赖业务逻辑处理冲突。

📌 使用场景

  • 高并发、低冲突 :如电商秒杀、库存扣减。
  • 弱一致性要求 :如缓存更新、非关键数据修改。
  • 幂等性操作 :如订单状态变更(允许多次尝试)。
1.40.2.2 数据库悲观锁(Pessimistic Lock)

原理

  • 核心思想 :假设冲突频繁发生(“悲观”),在事务开始时即加锁,防止其他事务修改。
  • 实现方式 :
    • SELECT ... FOR UPDATE(行级锁)。
    • SELECT ... LOCK IN SHARE MODE(共享锁)。
  • 示例 :
START TRANSACTION;
SELECT * FROM inventory WHERE product_id = 1001FORUPDATE;
UPDATE inventory SET stock = stock - 1WHERE product_id = 1001;
COMMIT;

✅ 优点

  • 强一致性 :确保事务期间数据不被修改。
  • 简单直接 :无需版本号或重试逻辑。

❌ 缺点

  • 性能低 :锁竞争可能导致阻塞,影响吞吐量。
  • 死锁风险 :多个事务交叉加锁可能引发死锁。
  • 资源占用高 :长时间持有锁会消耗数据库连接池资源。

📌 使用场景

  • 严格一致性要求 :如银行转账、财务流水。
  • 写操作频繁 :如订单创建、库存锁定。
  • 短事务场景 :避免长时间持有锁。
1.40.2.3 Redis 分布式锁(Distributed Lock)

原理

  • 核心思想 :通过 Redis 的原子操作(如 SETNX 或 Redlock 算法)实现跨服务节点的资源互斥访问。
  • 实现方式 :
    • SETNX :SET key value NX PX timeout(原子性设置锁)。
    • Redlock :在多个 Redis 节点上加锁,确保高可用。
  • 示例(Lua 脚本实现原子性) :
-- 加锁
if redis.call("set", KEYS[1], ARGV[1], "NX", "PX", ARGV[2]) then
returntrue
else
returnfalse
end

-- 释放锁
if redis.call("get", KEYS[1]) == ARGV[1] then
return redis.call("del", KEYS[1])
else
returnfalse
end

✅ 优点

  • 跨服务协调 :适用于分布式系统(如微服务、多节点集群)。
  • 高性能 :Redis 基于内存,响应速度快。
  • 可扩展性强 :支持集群部署(如 Redis Sentinel、Redis Cluster)。

❌ 缺点

  • 网络依赖 :Redis 故障可能导致锁失效。
  • 死锁风险 :未设置超时或未正确释放锁。
  • 复杂性高 :需处理锁续期(Lease)、锁竞争、脑裂等问题。

📌 使用场景

  • 分布式任务调度 :如定时任务去重、全局计数器。
  • 共享资源访问 :如分布式限流、缓存预热。
  • 跨服务协调 :如订单状态同步、分布式事务协调。

 

1.40.2.4 三者对比表

特性

乐观锁

悲观锁

Redis 分布式锁

适用场景

读多写少、低冲突

写多读少、高一致性要求

分布式系统、跨服务协调

一致性保障

最终一致性(需重试)

强一致性

弱一致性(需超时机制)

性能

高(无锁竞争)

低(锁竞争)

高(基于内存)

复杂度

低(需版本号)

中(需事务管理)

高(需 Lua 脚本、超时)

死锁风险

无

有

有(未设置超时)

资源占用

低

高(连接池占用)

中(Redis 内存占用)

分布式支持

否

否

是

1.40.2.5 典型使用场景对比

场景

推荐锁类型

原因

电商秒杀库存扣减

乐观锁

高并发、低冲突,允许部分失败重试

银行转账

悲观锁

强一致性要求,需防止并发修改

分布式限流

Redis 分布式锁

多节点共享限流状态,需跨服务协调

订单状态变更

乐观锁

幂等性操作,允许冲突后重试

缓存预热

Redis 分布式锁

防止多个节点重复加载数据

全局唯一 ID 生成

Redis 分布式锁

需确保多个服务实例生成唯一 ID

库存锁定(下单阶段)

悲观锁

短事务内锁定库存,防止超卖

分布式任务调度

Redis 分布式锁

防止多个节点重复执行任务

……

数据预处理 数据预处理 数据预处理(数据清洗)是数据挖掘过程中的重要一步,它主要包括数据清洗,数据集成,数据变换和数据规约。 在我们进行数据挖掘的过程中,大量的原始数据中存在着大量有问题的数据(脏数据)比如有缺失值的,不一致的,有异常的,大量重复的数据等。这些脏数据会严重影响到数据挖掘建模过程的执行效率,也可能会使挖掘结果产生偏差。通过数据预处理(数据清洗)可以提高数据的质量,更好的适应特定的挖掘技术及工具。... 阅读详情

相关推荐

From Manual to Magic: How nnU-Net is Revolutionizing Biomedical Image Segmentation Without Human Int

本文探讨了nnU-Net如何通过全自动深度学习技术革新生物医学图像分割领域。作为自我配置的智能系统,nnU-Net无需人工干预即可完成从数据预处理到模型训练的全流程,显著提升医学影像分割的效率和精度,尤其在CT和MRI影像分析中表现卓越。

metal的博客 1082

分布式锁/乐观锁/悲观锁/死锁

分布式锁是一种用于在分布式系统中实现并发控制的机制。在分布式环境中,多个节点或进程同时访问共享资源时,需要确保数据的一致性和正确性。分布式锁提供了一种方法来协调并发访问,以避免数据竞争和冲突。目的:分布式锁的主要目的是确保在分布式系统中的多个节点之间对共享资源的访问是互斥的,即同一时间只有一个节点可以获取锁并执行关键代码段,其他节点需要等待锁的释放才能继续执行。实现方式:常见的分布式锁实现方式包括基于数据库、基于缓存、基于共享存储和基于协调服务等。具体选择取决于系统的需求、性能要求和可用的技术栈。

liulanba的博客 2397

别再为镜面物体检测发愁了!手把手教你用PMD相位偏折术增强2.5D形状图细节(附Python代码)

本文详细解析了PMD相位偏折术在工业视觉中镜面物体检测的应用,通过2.5D成像方案增强形状图细节。文章提供了Python代码示例,介绍了一种计算高效的局部特征增强算法,帮助解决产线环境中的噪声问题,提升缺陷识别准确率。

weixin_29299807的博客 346

Redis乐观锁操作以及一些应用场景

乐观锁和悲观锁是两种处理并发访问的不同策略,它们在处理共享资源时采取了不同的思路和机制。

xzz的博客 1491

LAN8720芯片硬件设计避坑指南:从晶振选择到PHY地址配置的5个关键细节

本文深入解析LAN8720以太网PHY芯片硬件设计的五个关键细节,涵盖晶振模式选择、PHY地址配置、复位电路设计、电源滤波与接口布线。重点阐述了REF_CLK Out与REF_CLK In两种时钟模式的配置逻辑与应用场景,提供了避免通信失败与信号完整性问题的实战方案,是嵌入式网络硬件开发的实用避坑指南。

i1j2k的博客 513

复用浏览器之跳过扫码登录

复用浏览器 1、通过命令启动浏览器:chrome --remote-debugging-port=9222(前提是退出所有的chrome浏览器) 2、启动浏览器之后,在地址栏输入127.0.01:9222,成功复用如下图所示:

qq_43911915的博客 2033

啊涛JAVA面试题四(分布式锁和乐观锁有什么区别)

乐观锁则是一种在数据处理过程中的锁机制,它假设多个进程或系统并发访问共享资源时,不会彼此冲突,因此在数据处理过程中不会加锁。乐观锁通常是通过数据版本记录机制来实现,即每次读取数据时都会读取版本号,在更新数据时检查版本号是否发生变化,如果版本号发生变化则说明数据被其他进程修改过,此时会拒绝更新并重新尝试。总的来说,分布式锁和乐观锁都是为了解决并发访问共享资源时可能出现的问题,但它们的实现方式和应用场景有所不同。分布式锁和乐观锁是两种不同的锁机制,它们的应用场景和实现方式有所不同。

qq_43754662的博客 431

别再手动算临界转速了!用ANSYS Workbench 2023 R2快速搞定转子坎贝尔图(附完整APDL命令流)

本文详细介绍了如何利用ANSYS Workbench 2023 R2快速生成转子坎贝尔图,实现全自动临界转速分析。通过对比传统手动计算与Workbench自动化流程的效率差异,展示了其在旋转机械设计中的革命性优势,包括大幅缩短分析周期、提升精度至98.7%。文章还提供了完整的APDL命令流和实战案例,帮助工程师快速掌握这一高效工具。

weixin_42699679的博客 470

浅谈分布式锁

原文地址:https://kb.cnblogs.com/page/576356/  前言   随着互联网技术的不断发展,数据量的不断增加,业务逻辑日趋复杂,在这种背景下,传统的集中式系统已经无法满足我们的业务需求,分布式系统被应用在更多的场景,而在分布式系统中访问共享资源就需要一种互斥机制,来防止彼此之间的互相干扰,以保证一致性,在这种情况下,我们就需要用到分布

a_login的博客 485

C#上位机面试必问30题:机器视觉+工业通信+性能优化(含答案解析)

工业通信:围绕“稳定性”展开,重点答异常处理、断线重连、资源释放;机器视觉:围绕“精度+速度”展开,重点答预处理、ROI、参数优化;性能优化:围绕“UI不卡、内存不泄、效率不低”展开,重点答异步、限流、资源复用;面试加分项:结合实际项目案例(如“我在XX项目中用信号量解决了多设备并发卡顿问题”)。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1508

使用Zed 实现测距

此代码基于官方代码基础上进行改写,主要是获取zed相机深度画面的深度值,为yolo测距打基础。Zed相机是由Stereolabs公司开发的一种先进的立体视觉相机。这种相机专为计算机视觉和机器学习应用而设计,能够提供高质量的3D捕捉和分析功能。: Zed相机配备有一对垂直排列的传感器,能够捕捉两个略有偏移的图像,从而模拟人的双眼视觉,实现深度感知。: 利用立体成像技术,Zed相机能够实时生成环境的3D模型,这对于机器人导航、增强现实(AR)和虚拟现实(VR)等应用至关重要。

weixin_45303602的博客 911

乐观锁、悲观锁、分布式锁

乐观锁、悲观锁、分布式锁

2302_79802185的博客 1085

海上通信技术发展与研究综述

通过对海浪模型、节点运动特性、天线辐射特性等进行特征深度学习,考虑改变有效链路的持续时间、业务类型和容量的区别,以及卫星和节点的仰角等,改变通信策略,设计动态波束成形算法,优化折中浮标天线增益和波束宽度,适应海上环境,尤其是海浪运动时变的特性。目前的海上通信系统,同时包括海上无线通信系统、卫星通信系统、岸基通信系统、船载基站通信系统、空中基站通信系统等不同方法组成的通信系统来满足不同的需求,如海上无线通信系统通信成本低廉、卫星通信系统具有广域的覆盖范围、岸基通信网络可以实现数据高速传输。

weixin_70923796的博客 1000

Alibaba、鹅厂、蚂蚁Java岗面试及经验总结(含答案)

在过去很长一段时间内,国内互联网一直处于三足鼎立状态,BAT即百度、阿里巴巴、腾讯。而在最新的互联网企业价值榜上,百度却被蚂蚁金服挤出前三的位置。 能够进一线互联网公司,是大部分程序员奋斗的目标,有很多小伙伴可能因为学历望而止步,其实只要能力够,学历真的不是那么重要! 今天给大家带来ATM(阿里巴巴,腾讯,蚂蚁金服)的Java面试真题,希望能帮助各位读者在奋斗的路上少走弯路。 阿里巴巴Java岗位(技术三面) 一面 1、自我介绍,讲讲求职意向和擅长的技能 2、Tomcat的基本架构是什.

weixin_50666791的博客 233

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

悲观锁、乐观锁与分布式锁(Lua、Redisson、WatchDog、multiLock)深度解析

并发编程中,锁是保障数据一致性的核心机制。悲观锁(如synchronized)采用“先加锁后操作”策略,适用于写多读少的高冲突场景(如秒杀),保证强一致性但性能开销大。乐观锁(如CAS机制)采用“先操作后校验”策略,通过版本号控制实现无锁并发,适合读多写少的低冲突场景,性能更高。分布式锁(如基于Redis的实现)解决跨进程资源竞争,需注意原子性和锁续期,可通过Redisson等工具简化实现。选择锁的本质是在数据一致性和系统性能间寻求平衡,需根据具体业务场景的冲突概率和性能要求做出最合适的选择。

2401_86176995的博客 1820

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

数据库乐观锁和悲观锁、redis分布式锁使用场景

简单的介绍了乐观锁和悲观,以及基于redis实现分布式锁,对应的应用场景。让我们在实际开发中能够合理的去选择锁方案。!!ps: 买服务器返点;收徒中;面试全集在线文档,需要请私信。

weixin_39439156的博客 1153

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

从悲观锁、乐观锁到分布式锁

从悲观锁、乐观锁到分布式锁 前言 我们在设计商品秒杀模块时为了防止“库存”超卖的情况,我们常常会使用一个锁的机制,解决多线程下数据一致性问题,但是在分布式集群下单节点的锁往往是无法满足业务的需求,本篇博客从悲观锁、乐观锁开始,逐步介绍分布式数据一致性的利器——分布式锁。 正文 悲观锁与乐观锁 悲观锁与乐观锁的差异: 悲观锁:一段执行逻辑加上悲观锁,不同线程同时执行时,只能有一个线程执行,其他的线程在入口处等待,直到锁被释放sychronized提供的是悲观锁 乐观锁:一段执行逻辑加上乐观锁,不同线程同时执

蹊源的奇思妙想的博客 1102

Redis中事务与乐观锁

会失败,事务不会执行。这时可以选择重新执行整个操作,确保数据一致性。此时就相当于SQL中的乐观锁功能。此时我想在一个事务中更新多个相关联的键,并希望确保在执行过程中这些键不会被其他客户端修改。被其他客户端修改了,

Xwz的博客 324

分布式中的锁

什么是共享锁(share Lock):允许多个事务同时获得该锁。共享锁(share lock)又称读锁,简称S锁;当一个事务为数据加上读锁之后,其他事务只能对该数据加读锁,而不能对数据加写锁,直到所有的读锁释放之后其他事务才能对其进行加持写锁。共享锁的特性主要是为了支持[并发]的读取数据,读取数据的时候不支持修改,避免出现重复读的问题。在select语句末尾加上lock in share mode关键字。什么是排它锁(exclusive Lock):排他锁又称写锁,简称×锁;当。

Edsen7的博客 260

乐观锁、悲观锁、分布式锁的总结

乐观锁、悲观锁、分布式锁

weixin_46307478的博客 2380

悲观锁、乐观锁以及分布式锁

当数据库执行select for update时会获取被select中的数据行的行锁,因此其他并发执行的select for update如果试图选中同一行则会发生排斥(需要等待行锁被释放),因此达到锁的效果。1.2.1乐观锁,也叫乐观并发控制,它假设多用户并发的事务在处理时不会彼此互相影响,各事务能够在不产生锁的情况下处理各自影响的那部分数据。冲突频率: 如果冲突频率非常高,建议采用悲观锁,保证成功率,如果冲突频率大,乐观锁会需要多次重试才能成功,代价比较大。悲观锁特点:先获取锁,再进行业务操作。

H215919719的博客 3040

分布式锁的三种实现的对比

原文: http://www.jianshu.com/p/c2b4aa7a12f1 锁是开发过程中十分常见的工具,在处理高并发请求的时候和订单数据的时候往往需要锁来帮助我们保证数据的安全。 场景1.前端点击太快,导致后端重复调用接口。两次调用一个接口,这样就会产生同一个请求执行了两次,而从用户的角度出发,他是因为太卡而点了两次,他的目标是执行一次请求。 场景2.对于高并发

notOnlyRush的博客 799

Springboot分别使用乐观锁和分布式锁(基于redisson)完成高并发防超卖

在电商中经常会有防超卖的需求,本质上是对一条数据的多线程并发情况下的数据安全性进行控制。 譬如一个商品goods,库存是100,在多线程都去读取修改的情况下,会产生数据错乱。 不加锁的情况 我们来看一个简单的例子,有个goods表,里面有个int型字段amount。我们用多线程来频繁修改amount的值,看看结果。 @Transactional(rollbackFor = Except...

tianyaleixiaowu的专栏 1万+

高并发场景下锁的使用技巧

如何确保一个方法,或者一块代码在高并发情况下,同一时间只能被一个线程执行,单体应用可以使用并发处理相关的 API 进行控制,但单体应用架构演变为分布式微服务架构后,跨进程的实例部署,显然...

619

redis乐观锁应用案例实践

专车系统给司机派单时,需要过滤掉已经派单的司机,防止出现将不同订单派单给同个司机的情况发生。 以下读写操作均是指redis进行读写。 目前系统里以城市维度保存了每个城市已经处于服务中(已派过订单)的司机列表,但读取城市服务中司机列表和写服务中司机列表时,未进行同步,可能由于高并发,会导致读的司机列表在执行司机筛选时,服务中司机列表被更改。从而出现同个司机派了多个不同的订单的情况发生。 因此考虑两种方式实现 1.使用redis分布式锁实现悲观锁 读取服务中司机列表和写入服务中司机列表使用同一个分布式

海潮的专栏 510

乐观锁、悲观锁、分布式锁的概念及实现

乐观锁、悲观锁、分布式锁的概念及实现

shengnan_only的博客 3801
上一篇: 一个问题,就难住一群3年+的Java后端[特殊字符]
下一篇: 设计一个支持10W QPS的评论中台,你会怎么设计?
Java阿福
博客等级 码龄2年 61粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值