【面试干货】数据库乐观锁,悲观锁的区别,怎么实现
【面试干货】数据库乐观锁,悲观锁的区别,怎么实现
- 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,展示数据图表、搜…...
大语言模型的工程技巧(四)——梯度检查点
相关说明 这篇文章的大部分内容参考自我的新书《解构大语言模型:从线性回归到通用人工智能》,欢迎有兴趣的读者多多支持。 本文将讨论如何利用梯度检查点算法来减少模型在训练时候(更准确地说是运行反向传播算法时)的内存开支。…...
大模型基础无非就这些!(附学习资料)
今年春招,算法岗位中,薪资开的最高的无疑是大模型相关的岗位,大模型相关应用正在逐步落地,往后3-5年,大模型仍是热门方向 大家常听到的AI算法工程师,基座大模型,大模型应用工程师等都属于大模型…...
来画AI漫剧软件2025推荐,创新故事创作工具引领未来
来画AI漫剧软件2025推荐,创新故事创作工具引领未来一、引言随着科技的快速发展,越来越多的创新工具正在改变我们的创作方式。来画AI漫剧软件作为一款集成了人工智能技术的故事创作工具,正逐渐成为创作者们的新宠。本文将从多个维度详细解析来…...
突破平台壁垒:3种方法让Windows直接运行安卓应用
突破平台壁垒:3种方法让Windows直接运行安卓应用 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 当你在电脑前急需使用手机专属办公软件,却只能…...
K8s ConfigMap实战全解析
ConfigMap祥解 ConfigMap与 Secret 类似,用来存储配置文件的kubernetes资源对象,所有的配置内容都存储在etcd中。与 Secret 的区别: ConfigMap 保存的是不需要加密的、应用所需的配置信息。ConfigMap 的用法几乎与 Secret 完全相同࿱…...
免费使用云服务器训练深度学习模型
目前应该有很多课程设计或者毕业设计都是关于深度学习的,如果电脑上没有GPU的话训练一个模型需要很长时间,但是目前可以从很多云服务器上免费额度进行训练(新用户),这里记录一下使用腾讯云免费进行模型训练的流程&…...
智能去重引擎:Zotero文献管理效率提升指南
智能去重引擎:Zotero文献管理效率提升指南 【免费下载链接】ZoteroDuplicatesMerger A zotero plugin to automatically merge duplicate items 项目地址: https://gitcode.com/gh_mirrors/zo/ZoteroDuplicatesMerger 学术研究中,文献库的整洁度直…...
让效率飞起来!用拖把更名器将文件整理时间缩短90%
在当今快节奏的工作环境中,效率就是竞争力。同样的工作任务,别人需要一小时完成,你只需十分钟,这就是实实在在的优势。 文件整理是许多人日常工作中不可或缺的一部分,而批量文件重命名又是文件整理中的常见任务。 如果…...
如何永久保存微信聊天记录:WeChatMsg完整解决方案指南
如何永久保存微信聊天记录:WeChatMsg完整解决方案指南 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/WeCha…...
编程常见函数--求反序int(C、C++、Python版)
目录 函数功能 思路 具体步骤 变量初始化 循环条件 反序数计算 返回值 示例说明 注意事项 C C通用代码 Python代码 函数功能 该函数用于计算一个整数的反序数,常用于判断对称性或者反序的场景 例如,输入 123,输出 321;输…...
STM32F103串口DMA实战:从CubeMX配置到实现一个稳定的数据收发中间件
STM32F103串口DMA实战:构建工业级通信中间件的五个关键设计 在嵌入式开发中,串口通信就像设备的神经系统,而DMA则是让这个系统高效运转的关键。想象一下,当你需要同时处理4G模块的数据传输、LoRa无线通信和调试日志输出时&#x…...
