当前位置: 首页 > news >正文

【面试干货】数据库乐观锁,悲观锁的区别,怎么实现

【面试干货】数据库乐观锁,悲观锁的区别,怎么实现

  • 1、乐观锁,悲观锁的区别
  • 2、总结


💖The Begin💖点点关注,收藏不迷路💖

1、乐观锁,悲观锁的区别

  1. 悲观锁(Pessimistic Lock)

    定义: 每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞挂起直到它拿到锁

    实现: 传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁,读锁,写锁等,都是在做操作之前先上锁

    特点: 适用于写操作频繁的场景,但可能会降低并发性能,因为上锁会阻塞其他操作的进行。

示例代码(伪代码):

-- 悲观锁示例(以行锁为例)  
SELECT * FROM table_name WHERE id = 1 FOR UPDATE;  -- 对id为1的行加锁
  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; //栈顶指针&#xff0c;永远指向栈顶元素 }SqStack;//初始化&#xff0c;使栈顶指针指向-1 void InitStack(SqStack &S){S.top-1; }…...

军队仓库管理系统|DW-S301系统特点

部队仓库管理系统DW-S301系统通过数据采集、互联网和物联网技术&#xff0c;实现数字化智能管控&#xff0c;以提高军用物资的仓储准确率和流转率&#xff0c;缩短周转时间&#xff0c;降低库存成本&#xff0c;也有助于消除生产过程中的不确定性。 系统功能&#xff1a;通过部…...

MySQL和MongoDB数据库的区别

MySQL和MongoDB数据库的区别 随着大数据和云计算技术的兴起&#xff0c;数据库的选择成为开发者和架构师必须面对的重要决策。MySQL和MongoDB作为关系型数据库和非关系型数据库的代表&#xff0c;在各自领域都有着广泛的应用。本文将从多方面详细比较MySQL和MongoDB&#xff0…...

类脑计算和量子计算、人工智能的关系

According to www.iAsk.ai Ask Ai Search Engine: 类脑计算、量子计算和人工智能是三个不同但相关的领域。它们在不同层面上探索和利用了不同的计算模型和技术&#xff0c;但都旨在推动计算能力的发展和创新。 类脑计算是一种受到人脑神经系统启发的计算模型。它试图通过模拟…...

Qt5 互动地图,实现无人机地面站效果

一、概述 本文主要通过Qt5opmapcontrol实现一个简单的无人机地面站效果。opmapcontrol是一个比较古老的QT开源地面站库&#xff0c;可选择谷歌地图&#xff0c;必应地图&#xff0c; 雅虎地图&#xff0c;GIS等。可直接使用源码&#xff0c;也可以编译生成库进行调用。实现效果…...

【文末附gpt升级方案】TikTok Symphony AI套件:智能视频制作的新篇章

TikTok Symphony AI套件&#xff1a;智能视频制作的新篇章 摘要 随着短视频平台的兴起&#xff0c;视频内容的创作与制作已成为品牌方吸引用户、传递信息的重要手段。TikTok作为全球领先的短视频平台&#xff0c;近日宣布推出Symphony AI套件&#xff0c;旨在通过人工智能技术…...

面试回答——有高并发、高性能、高可用系统架构设计实践以及性能调优经验

&#x1f308;hello&#xff0c;你好鸭&#xff0c;我是Ethan&#xff0c;一名不断学习的码农&#xff0c;很高兴你能来阅读。 ✔️目前博客主要更新Java系列、项目案例、计算机必学四件套等。 &#x1f3c3;人生之义&#xff0c;在于追求&#xff0c;不在成败&#xff0c;勤通…...

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中&#xff0c;可以使用 PhpSpreadsheet 库来创建和导出Excel文件。PhpSpreadsheet 是一个纯PHP 编写的组件库&#xff0c;它使用现代 PHP 写法&#xff0c;代码质量和性能比 PHPExcel 高不少&#xff0c;完全可以替代PHPExcel&#xff08;PHPExcel已不再维护…...

安装docker版elasticsearch和kibana

本文将介绍用docker的方式安装elasticsearch和kibana&#xff0c;并用浏览器访问elasticsearch。这里的elasticsearch主要给测试环境使用&#xff0c;因此不会设置https和密码。kibana是elasticsearch的前端&#xff0c;可以用来访问elasticsearch&#xff0c;展示数据图表、搜…...

大语言模型的工程技巧(四)——梯度检查点

相关说明 这篇文章的大部分内容参考自我的新书《解构大语言模型&#xff1a;从线性回归到通用人工智能》&#xff0c;欢迎有兴趣的读者多多支持。 本文将讨论如何利用梯度检查点算法来减少模型在训练时候&#xff08;更准确地说是运行反向传播算法时&#xff09;的内存开支。…...

2026届学术党必备的五大降重复率助手推荐榜单

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 全方位展示大规模语言模型前沿进展的是DeepSeek系列论文。其核心架构精心采用了混合专家模型…...

别再手动切换主从了!用Patroni+etcd给PostgreSQL 15上个自动故障转移的保险

告别手动切换时代&#xff1a;用Patronietcd构建PostgreSQL 15全自动高可用架构 凌晨三点&#xff0c;数据库告警短信惊醒梦中人——主库响应超时。你揉着惺忪睡眼打开终端&#xff0c;却发现从库早已自动接管业务流量&#xff0c;应用连接池平稳如常。这不是科幻场景&#xff…...

紧急!GraalVM上线后OOM频发?立即执行这5个内存安全检查项——覆盖Quarkus/Spring Native主流框架

第一章&#xff1a;GraalVM静态镜像内存异常的典型表征与根因定位全景图GraalVM 静态镜像&#xff08;Native Image&#xff09;在启动性能与资源占用方面具备显著优势&#xff0c;但其编译期内存模型与运行时行为存在根本性差异&#xff0c;导致内存异常表现隐晦且难以复现。典…...

HTML5 标题

HTML5 标题 (Headings) 学习笔记 HTML5 中的标题元素用于定义文档的层级结构。它们对于文档结构、**SEO&#xff08;搜索引擎优化&#xff09;以及无障碍访问&#xff08;Accessibility&#xff09;**至关重要。 一、标题元素概览 HTML 提供了 6 个级别的标题&#xff0c;从最…...

OpenTAP硬件集成测试优势解析

OpenTAP 之所以在硬件和系统集成测试领域表现出色&#xff0c;主要得益于其独特的设计理念、灵活的架构以及强大的社区生态支持。以下将从核心架构、技术优势、应用场景和具体实施案例等多个维度进行详细阐述。 一、 核心架构与设计理念 OpenTAP 基于 .NET 平台构建&#xff…...

反向跟单为什么总以失败告终?这正是大多数人转向复制跟单的真相

你知道什么是反向跟单吗&#xff1f;简单说&#xff0c;就是找到一批持续亏损的交易者&#xff0c;用专业跟单软件跟踪他们的操作&#xff0c;然后与他们做完全相反的交易——他们做多&#xff0c;你就做空&#xff1b;他们做空&#xff0c;你就做多。只要他们亏损多少&#xf…...

10.Agent 进阶实践:基于 Planner-Executor-Responder 的多步决策系统实现

目 录 从单步执行到多步决策与状态流转最小循环Agent代码实现工具选择planner执行工具executor执行输出responder 从单步执行到多步决策与状态流转 最近不知道大家有没有关注一些招聘平台的招聘信息&#xff0c;其实看这些平台我相信最多的关键词就Cot、ReAct等&#xff0c;今…...

高效3D医学图像分割实战:MedSAM从入门到精通

高效3D医学图像分割实战&#xff1a;MedSAM从入门到精通 【免费下载链接】MedSAM Segment Anything in Medical Images 项目地址: https://gitcode.com/gh_mirrors/me/MedSAM MedSAM&#xff08;Segment Anything in Medical Images&#xff09;是一款专为医学影像设计的…...

Windows安卓应用安装新方案:APK-Installer极简指南

Windows安卓应用安装新方案&#xff1a;APK-Installer极简指南 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 在Windows系统上运行安卓应用一直是许多用户的痛点。传统…...

编写程序让智能鱼缸换水提醒,水质指标超标提示“及时换水”。

项目名称&#xff1a;Aquarium Guardian (智能鱼缸管家)一、 实际应用场景描述在一个典型的家庭或办公室观赏鱼缸场景中&#xff0c;鱼友&#xff08;用户&#xff09;通常依赖经验或日历提醒来进行换水。然而&#xff0c;鱼缸的水质受多种因素影响&#xff1a;* 生物因素&…...