【面试干货】数据库乐观锁,悲观锁的区别,怎么实现
【面试干货】数据库乐观锁,悲观锁的区别,怎么实现
- 1、乐观锁,悲观锁的区别
- 2、总结
| 💖The Begin💖点点关注,收藏不迷路💖 |
1、乐观锁,悲观锁的区别
- 悲观锁(Pessimistic Lock)
定义: 每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞挂起直到它拿到锁。
实现: 传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁,读锁,写锁等,都是在做操作之前先上锁。
特点:适用于写操作频繁的场景,但可能会降低并发性能,因为上锁会阻塞其他操作的进行。
示例代码(伪代码):
-- 悲观锁示例(以行锁为例)
SELECT * FROM table_name WHERE id = 1 FOR UPDATE; -- 对id为1的行加锁
- 乐观锁(Optimistic Lock)
定义: 每次去拿数据的时候都认为别人不会修改数据,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据。
实现:版本号机制(如:为数据表增加一个版本号字段,在更新数据时判断版本号是否变化)或者时间戳机制(使用数据的最后更新时间戳,在更新时判断时间戳是否发生变化)是常见的乐观锁实现方式。
特点:适用于多读少写的场景,可以提高系统的整体吞吐量。但如果冲突频繁,上层应用会不断重试,降低性能。
示例代码(伪代码):
-- 乐观锁示例(以版本号为例)
UPDATE table_name SET column1 = value1, version = version + 1 WHERE id = 1 AND versio
old_version 是之前读取到的版本号,如果更新操作影响的行数为0,则表示在此期间有其他事务已经修改了数据,需要重试。
2、总结
选择:
1、根据实际应用场景选择使用悲观锁还是乐观锁。 如果写操作较少,且希望提高系统吞吐量,可以考虑使用乐观锁;
2、如果写操作频繁,且希望减少数据冲突,可以考虑使用悲观锁。
注意: 在使用乐观锁时,需要合理设置重试次数和重试间隔,避免频繁重试导致性能下降。同时,需要确保在更新数据时能够正确判断数据是否被其他事务修改过。

| 💖The End💖点点关注,收藏不迷路💖 |
相关文章:
【面试干货】数据库乐观锁,悲观锁的区别,怎么实现
【面试干货】数据库乐观锁,悲观锁的区别,怎么实现 1、乐观锁,悲观锁的区别2、总结 💖The Begin💖点点关注,收藏不迷路💖 1、乐观锁,悲观锁的区别 悲观锁(Pessimistic Lo…...
移动端仪表盘,支持更多组件
05/22 主要更新模块概览 定位函数 快捷筛选 轨迹图表 时间组件 01 表单管理 1.1 【表单组件】- 表单关联新增支持自定义按钮样式 说明: 表单关联-关联数据按钮,原仅支持默认按钮样式,现增加关联数据按钮自定义功能,满…...
科技产业园3D探秘:未来科技之城的奇幻之旅
在数字时代的浪潮中,科技产业园区成为了推动城市经济发展、科技创新的重要引擎。 当我们打开科技产业园的3D可视化模型,仿佛穿越时空,来到了一个充满奇幻色彩的科技世界。在这里,高楼大厦鳞次栉比,绿色植被点缀其间&am…...
【Python搞定车载自动化测试】——Python基于Pytest框架实现UDS诊断自动化(含Python源码)
系列文章目录 【Python搞定车载自动化测试】系列文章目录汇总 文章目录 系列文章目录💯💯💯 前言💯💯💯一、环境搭建1.软件环境2.硬件环境 二、目录结构三、源码展示1.诊断基础函数方法2.诊断业务函数方法…...
探索SPI单线传输模式中时钟线与数据传输的简化
探索SPI单线传输模式:时钟线与数据传输的简化之道 在当今的嵌入式系统和微控制器通信中,串行外设接口(SPI)因其高速、全双工和同步的特点而广受欢迎。然而,随着设备尺寸和复杂性的不断减少,对SPI通信的简化…...
使用FFmpeg推流实现在B站24小时点歌直播
使用FFmpeg推流实现在B站24小时点歌直播 本文首发于个人博客 安装FFmpeg centos7 https://www.myfreax.com/how-to-install-ffmpeg-on-centos-7/ https://linuxize.com/post/how-to-install-ffmpeg-on-centos-7/ 使用FFmpeg在B站直播 https://zhuanlan.zhihu.com/p/2395…...
汽车防抱死制动系统ABS的单片机程序Proteus仿真设计
次设计对汽车防抱死系统进行简单的设计,针对车速、轮速两个信号进行分析,并根据最佳滑移率计算。采用对比实时滑移率对比分析,ECU控制制动器进行制动力调节使滑移率在制动过程处于最佳范围,保证系统具有良好制动性能。 汽车的制动液压调节器主要包含以下几个部件:调压电磁…...
IOS开发者证书快捷申请
App Uploader 在进行iOS应用开发中,可以借助appuploader辅助工具进行证书制作、上传和安装测试等操作。首先,您需要访问官方网站获取最新版本的appuploader。最新版本已经优化了与Apple账号的登录流程,无需支付688元,并提供了Windows版和Mac版供用户选择。下载完成后,解压…...
python 火焰检测
在日常生活,总是离不开火,有时候我们需要预防火灾发生,但是我们又不可能一直盯着,这时候我们就需要一款程序帮我们盯着,一旦发生火灾从而告知我们,今天就带大家编写这么一款应用。 安装需要的库 pip install opencv-python 代码实现 import cv2 # Library for…...
栈——顺序存储
#include<stdio.h> #define MaxSize 10 //栈的所有操作时间复杂度都是O(1) //定义 typedef struct{int data[MaxSize];int top; //栈顶指针,永远指向栈顶元素 }SqStack;//初始化,使栈顶指针指向-1 void InitStack(SqStack &S){S.top-1; }…...
军队仓库管理系统|DW-S301系统特点
部队仓库管理系统DW-S301系统通过数据采集、互联网和物联网技术,实现数字化智能管控,以提高军用物资的仓储准确率和流转率,缩短周转时间,降低库存成本,也有助于消除生产过程中的不确定性。 系统功能:通过部…...
MySQL和MongoDB数据库的区别
MySQL和MongoDB数据库的区别 随着大数据和云计算技术的兴起,数据库的选择成为开发者和架构师必须面对的重要决策。MySQL和MongoDB作为关系型数据库和非关系型数据库的代表,在各自领域都有着广泛的应用。本文将从多方面详细比较MySQL和MongoDB࿰…...
类脑计算和量子计算、人工智能的关系
According to www.iAsk.ai Ask Ai Search Engine: 类脑计算、量子计算和人工智能是三个不同但相关的领域。它们在不同层面上探索和利用了不同的计算模型和技术,但都旨在推动计算能力的发展和创新。 类脑计算是一种受到人脑神经系统启发的计算模型。它试图通过模拟…...
Qt5 互动地图,实现无人机地面站效果
一、概述 本文主要通过Qt5opmapcontrol实现一个简单的无人机地面站效果。opmapcontrol是一个比较古老的QT开源地面站库,可选择谷歌地图,必应地图, 雅虎地图,GIS等。可直接使用源码,也可以编译生成库进行调用。实现效果…...
【文末附gpt升级方案】TikTok Symphony AI套件:智能视频制作的新篇章
TikTok Symphony AI套件:智能视频制作的新篇章 摘要 随着短视频平台的兴起,视频内容的创作与制作已成为品牌方吸引用户、传递信息的重要手段。TikTok作为全球领先的短视频平台,近日宣布推出Symphony AI套件,旨在通过人工智能技术…...
面试回答——有高并发、高性能、高可用系统架构设计实践以及性能调优经验
🌈hello,你好鸭,我是Ethan,一名不断学习的码农,很高兴你能来阅读。 ✔️目前博客主要更新Java系列、项目案例、计算机必学四件套等。 🏃人生之义,在于追求,不在成败,勤通…...
rocketmq初识
package com.ldj.rocketmq.producer;import org.apache.rocketmq.client.producer.DefaultMQProducer; import org.apache.rocketmq.common.message.Message;import java.nio.charset.StandardCharsets;/*** User: ldj* Date: 2024/3/26* Time: 2:26* Description: 单向消息生产…...
php 使用phpoffice导出导出excel
荆轲刺秦王 在PHP中,可以使用 PhpSpreadsheet 库来创建和导出Excel文件。PhpSpreadsheet 是一个纯PHP 编写的组件库,它使用现代 PHP 写法,代码质量和性能比 PHPExcel 高不少,完全可以替代PHPExcel(PHPExcel已不再维护…...
安装docker版elasticsearch和kibana
本文将介绍用docker的方式安装elasticsearch和kibana,并用浏览器访问elasticsearch。这里的elasticsearch主要给测试环境使用,因此不会设置https和密码。kibana是elasticsearch的前端,可以用来访问elasticsearch,展示数据图表、搜…...
大语言模型的工程技巧(四)——梯度检查点
相关说明 这篇文章的大部分内容参考自我的新书《解构大语言模型:从线性回归到通用人工智能》,欢迎有兴趣的读者多多支持。 本文将讨论如何利用梯度检查点算法来减少模型在训练时候(更准确地说是运行反向传播算法时)的内存开支。…...
2026届学术党必备的五大降重复率助手推荐榜单
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 全方位展示大规模语言模型前沿进展的是DeepSeek系列论文。其核心架构精心采用了混合专家模型…...
别再手动切换主从了!用Patroni+etcd给PostgreSQL 15上个自动故障转移的保险
告别手动切换时代:用Patronietcd构建PostgreSQL 15全自动高可用架构 凌晨三点,数据库告警短信惊醒梦中人——主库响应超时。你揉着惺忪睡眼打开终端,却发现从库早已自动接管业务流量,应用连接池平稳如常。这不是科幻场景ÿ…...
紧急!GraalVM上线后OOM频发?立即执行这5个内存安全检查项——覆盖Quarkus/Spring Native主流框架
第一章:GraalVM静态镜像内存异常的典型表征与根因定位全景图GraalVM 静态镜像(Native Image)在启动性能与资源占用方面具备显著优势,但其编译期内存模型与运行时行为存在根本性差异,导致内存异常表现隐晦且难以复现。典…...
HTML5 标题
HTML5 标题 (Headings) 学习笔记 HTML5 中的标题元素用于定义文档的层级结构。它们对于文档结构、**SEO(搜索引擎优化)以及无障碍访问(Accessibility)**至关重要。 一、标题元素概览 HTML 提供了 6 个级别的标题,从最…...
OpenTAP硬件集成测试优势解析
OpenTAP 之所以在硬件和系统集成测试领域表现出色,主要得益于其独特的设计理念、灵活的架构以及强大的社区生态支持。以下将从核心架构、技术优势、应用场景和具体实施案例等多个维度进行详细阐述。 一、 核心架构与设计理念 OpenTAP 基于 .NET 平台构建ÿ…...
反向跟单为什么总以失败告终?这正是大多数人转向复制跟单的真相
你知道什么是反向跟单吗?简单说,就是找到一批持续亏损的交易者,用专业跟单软件跟踪他们的操作,然后与他们做完全相反的交易——他们做多,你就做空;他们做空,你就做多。只要他们亏损多少…...
10.Agent 进阶实践:基于 Planner-Executor-Responder 的多步决策系统实现
目 录 从单步执行到多步决策与状态流转最小循环Agent代码实现工具选择planner执行工具executor执行输出responder 从单步执行到多步决策与状态流转 最近不知道大家有没有关注一些招聘平台的招聘信息,其实看这些平台我相信最多的关键词就Cot、ReAct等,今…...
高效3D医学图像分割实战:MedSAM从入门到精通
高效3D医学图像分割实战:MedSAM从入门到精通 【免费下载链接】MedSAM Segment Anything in Medical Images 项目地址: https://gitcode.com/gh_mirrors/me/MedSAM MedSAM(Segment Anything in Medical Images)是一款专为医学影像设计的…...
Windows安卓应用安装新方案:APK-Installer极简指南
Windows安卓应用安装新方案:APK-Installer极简指南 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 在Windows系统上运行安卓应用一直是许多用户的痛点。传统…...
编写程序让智能鱼缸换水提醒,水质指标超标提示“及时换水”。
项目名称:Aquarium Guardian (智能鱼缸管家)一、 实际应用场景描述在一个典型的家庭或办公室观赏鱼缸场景中,鱼友(用户)通常依赖经验或日历提醒来进行换水。然而,鱼缸的水质受多种因素影响:* 生物因素&…...
