2-(脏读,不可重复读,幻读 ,mysql5.7以后默认隔离级别)、( 什么是qps,tps,并发量,pv,uv)、(什么是接口幂等性问题,如何解决?)
1 脏读,不可重复读,幻读 ,mysql5.7以后默认隔离级别是什么?
2 什么是qps,tps,并发量,pv,uv
3 什么是接口幂等性问题,如何解决?
1 脏读,不可重复读,幻读 ,mysql5.7以后默认隔离级别是什么?
脏读(Dirty Read),不可重复读(Non-Repeatable Read),和幻读(Phantom Read)是
数据库中事务隔离级别引发的问题,它们描述了不同类型的并发读取问题。### 1. 脏读(Dirty Read):**定义:** 脏读是指一个事务读取了另一个事务未提交的数据。如果事务 A 修改了一行数据,而事务 B 读取了这个未提交的修改,如果事务 A 回滚,那么事务 B 读取到的数据就是无效的。**例子:**
1. 事务 A 开始,更新了某行数据但还未提交。
2. 事务 B 读取了这行数据。
3. 事务 A 回滚。
4. 事务 B 读取到的数据是无效的,因为事务 A 的更新被撤销了。### 2. 不可重复读(Non-Repeatable Read):**定义:** 不可重复读是指在一个事务内,同一查询在不同时间点返回了不同的结果。这是因为在两次查询之间,另一个事务修改了相同的数据。**例子:**
1. 事务 A 开始,读取某行数据。
2. 事务 B 开始,更新或删除了这行数据并提交。
3. 事务 A 再次读取相同的数据,但结果已经不同了。### 3. 幻读(Phantom Read):**定义:** 幻读是指在一个事务内,同一查询在不同时间点返回了不同数量的行。这是因为在两次查询之间,另一个事务插入或删除了数据,导致查询结果不一致。**例子:**
1. 事务 A 开始,根据某个条件查询了一批数据。
2. 事务 B 开始,插入了符合条件的新数据,并提交。
3. 事务 A 再次查询相同条件下的数据,结果行数不同了。### 事务隔离级别:
- **读未提交(Read Uncommitted):** 允许脏读、不可重复读和幻读。
- **读已提交(Read Committed):** 防止脏读,但允许不可重复读和幻读。
- **可重复读(Repeatable Read):** 防止脏读和不可重复读,但允许幻读。
- **串行化(Serializable):** 防止脏读、不可重复读和幻读,是最高隔离级别。选择合适的隔离级别取决于应用的需求和性能要求。更高的隔离级别通常伴随着更多的锁和性能开销。
在 MySQL 中,有四种事务隔离级别,分别是:- **读未提交(Read Uncommitted):** 允许事务读取尚未提交的更改。这可能导致脏读、不可重复读和幻读。- **读已提交(Read Committed):** 允许事务读取已经提交的更改。避免了脏读,但仍可能有不可重复读和幻读。- **可重复读(Repeatable Read):** 对相同字段的多次读取是一致的,除非事务本身进行写操作。避免了脏读和不可重复读,但仍可能有幻读。- **串行化(Serializable):** 最高的隔离级别,通过对读和写加锁来防止所有并发问题,包括脏读、不可重复读和幻读。MySQL 5.7 默认的隔离级别是 **可重复读**。
事务什么?作用是什么?
**事务**是数据库管理系统(DBMS)执行的一个操作序列,被视为一个逻辑工作单元,
要么完全执行,要么完全不执行,而且是一个不可分割的工作单位。事务具有四个特性,通常称为ACID属性:1. **原子性(Atomicity):** 事务是一个不可分割的工作单元,要么全部执行,要么全部不执行。如果事务中的任何操作失败,整个事务都会被回滚到初始状态。
2. **一致性(Consistency):** 事务在执行前后数据库必须保持一致性状态。这意味着事务执行后,数据库从一个一致性状态转变为另一个一致性状态。
3. **隔离性(Isolation):** 各个事务的执行互相独立,一个事务的执行不能被其他事务干扰。事务的隔离性能防止并发执行的事务之间出现数据混乱。
4. **持久性(Durability):** 一旦事务被提交,对数据库中的数据的改变是永久性的。即使在系统崩溃之后,数据库状态也能够恢复到事务提交的状态。### 作用:1. **确保数据一致性:** 事务能够保证在其运行过程中数据库始终处于一致的状态。如果事务执行失败,数据库将回滚到事务开始前的状态,不会留下部分执行的结果。
2. **并发控制:** 事务隔离性确保了并发执行的事务之间不会相互干扰,防止了数据的混乱。数据库系统需要保证并发事务的执行效率,同时又要保证数据的一致性。
3. **持久性:** 事务的持久性确保了数据一旦被提交就会永久保存在数据库中,即使系统崩溃也能够通过日志等手段进行恢复。
4. **错误恢复:** 当系统发生错误或者事务执行失败时,事务可以被回滚,使数据库恢复到一个一致的状态。事务是数据库系统中保障数据完整性和一致性的一个重要机制,特别在多用户、高并发的数据库环境中,
事务的概念和ACID属性变得尤为重要。
2 什么是qps,tps,并发量,pv,uv
**QPS(Queries Per Second):** 表示每秒查询次数,通常用于衡量系统的查询处理能力。
**TPS(Transactions Per Second):** 表示每秒事务处理的数量,通常用于衡量系统的事务处理能力。
**并发量(Concurrency):** 表示系统同时处理的请求数量。高并发指系统能够同时处理大量请求。QPS = 并发量 / 平均响应时间并发量 = QPS * 平均响应时间例如当前系统QPS为1w,每个请求的响应时间都是2s,那么并发量就是2w
**PV(Page Views):** 表示页面浏览量,即网站在一段时间内被访问的总次数。
**UV(Unique Visitors):** 表示独立访客数量,即在一段时间内访问网站的不同访客数量。**DAU(日活)**DAU(Daily Active User),日活跃用户数量。常用于反映网站、app、网游的运营情况。DAU通常统计一日(统计日)之内,登录或使用了某个产品的用户数(去除重复登录的用户),与UV概念相似**MAU(月活)**MAU(Month Active User):月活跃用户数量,指网站、app等去重后的月活跃用户数量
2.1 模拟 QPS 和并发量
import time
import threading
from queue import Queue# 模拟查询的函数
def query():# 模拟查询需要的时间time.sleep(0.1)# 模拟 QPS 和并发量
def simulate_qps_and_concurrency(qps, concurrency):# 使用队列模拟并发请求request_queue = Queue()# 启动并发线程def worker():while True:request = request_queue.get()query() # 执行查询request_queue.task_done()for _ in range(concurrency):t = threading.Thread(target=worker)t.daemon = Truet.start()# 模拟 QPSstart_time = time.time()for _ in range(qps):request_queue.put("query")# 等待所有查询完成request_queue.join()# 计算消耗的时间elapsed_time = time.time() - start_timeprint(f"QPS: {qps}, Concurrency: {concurrency}, Elapsed Time: {elapsed_time:.2f} seconds")# 测试
simulate_qps_and_concurrency(qps=10, concurrency=5)
3 什么是接口幂等性问题,如何解决?
- **问题描述:** 接口幂等性是指同一请求的重复执行不会产生不同的效果,即无论调用一次还是多次,系统的状态都是一致的。-接口幂等性:无论调用多少次,产生的效果是一样的-get 获取数据天然幂等-put 修改数据天然幂等-修改库存(数字加减):不幂等-delete 删除 天然幂等-post 新增数据,会出现不幂等的情况,要把它做成幂等性的- **解决方案:**1. **唯一标识符:** 为每个请求生成一个唯一标识符,通过这个标识符来判断请求是否已经被处理。-唯一ID(unique):调用接口时,生成一个唯一id,redis将数据保存到集合中(去重),存在即处理过。-唯一主键:这个机制是利用了数据库的主键唯一约束的特性,解决了在insert场景时幂等问题。但主键的要求不是自增的主键,这样就需要业务生成全局唯一的主键2. **幂等接口设计:** 接口本身应该设计成幂等的,即多次调用不会产生额外的影响。-防重表:使用订单号orderNo做为去重表的唯一索引,把唯一索引插入去重表,再进行业务操作,且他们在同一个事务中。这个保证了重复请求时,因为去重表有唯一约束,导致请求失败,避免了幂等问题。这里要注意的是,去重表和业务表应该在同一库中,这样就保证了在同一个事务,即使业务操作失败了,也会把去重表的数据回滚。这个很好的保证了数据一致性。3. **使用 Token:** 在请求中包含一个令牌,服务器验证令牌的有效性,避免重复执行。1、下单接口的前一个接口,只要一访问,后端生成一个随机字符串,存到redis中,把随机字符串返回给前端。2、然后调用业务接口请求时,把随机数字符串携带过去,一般放在请求头部。3、服务器判断随机字符串是否存在redis中,存在表示第一次请求,然后redis删除随机字符串,继续执行业务。4、如果判断随机字符串不存在redis中,就表示是重复操作,直接返回重复标记给client,这样就保证了业务代码,不被重复执行。4. **数据库乐观锁:** 在数据库层面使用乐观锁机制,确保同一数据项在同一时间只能被处理一次。保证接口的幂等性对于处理因网络问题、重试或其他原因导致的重复请求是非常重要的。
3.1 通过添加唯一标识符保证接口的幂等性
import uuidclass IdempotentApi:def __init__(self):self.processed_requests = set()def process_request(self, request_id):if request_id in self.processed_requests:print(f"Request {request_id} has already been processed. Ignoring.")return# 模拟处理请求的业务逻辑print(f"Processing request {request_id}...")# ...# 标记请求已经处理self.processed_requests.add(request_id)print(f"Request {request_id} processed successfully.")# 创建一个 IdempotentApi 实例
api = IdempotentApi()# 模拟重复调用
request_id = str(uuid.uuid4())
api.process_request(request_id)
api.process_request(request_id)
相关文章:
2-(脏读,不可重复读,幻读 ,mysql5.7以后默认隔离级别)、( 什么是qps,tps,并发量,pv,uv)、(什么是接口幂等性问题,如何解决?)
1 脏读,不可重复读,幻读 ,mysql5.7以后默认隔离级别是什么? 2 什么是qps,tps,并发量,pv,uv 3 什么是接口幂等性问题,如何解决? 1 脏读,不可重复读…...

wpf devexpress 创建布局
模板解决方案 例子是一个演示连接数据库连接程序。打开RegistrationForm.BaseProject项目和如下步骤 RegistrationForm.Lesson1 项目包含结果 审查Form设计 使用LayoutControl套件创建混合控件和布局 LayoutControl套件包含三个主控件: LayoutControl - 根布局…...

Chrome 浏览器经常卡死问题解决
Chrome 浏览器经常卡死问题解决 打开WX, 搜索“程序员奇点” chrome 任务管理器杀进程 mac 后台有很多 google chrome helper 线程并且内存占用较高 一直怀疑是插件的锅 其实并不是-0- 查看是哪个网页,哪个插件占用内存 chrome 更多工具 -> 任务管理器 切换到…...
listbox控件响应鼠标右键消息
众所周知,对话框中的listbox控件无法响应鼠标消息。 但是,使用SetWindowPtrLong API函数,然后在新的窗口处理程序中,可以响应WM_RBUTTONDOWN等鼠标消息。代码非常简单,暂不提供,自己测试即可。...

设计模式(二)-创建者模式(2)-工厂模式
一、为何需要工厂模式(Factory Pattern)? 由于简单工厂模式存在一个缺点,如果工厂类创建的对象过多,使得代码变得越来越臃肿。这样导致工厂类难以扩展新实例,以及难以维护代码逻辑。于是在简单工厂模式的基础上&…...

2023年高压电工证考试题库及高压电工试题解析
题库来源:安全生产模拟考试一点通公众号小程序 2023年高压电工证考试题库及高压电工试题解析是安全生产模拟考试一点通结合(安监局)特种作业人员操作证考试大纲和(质检局)特种设备作业人员上岗证考试大纲随机出的高压…...

公网访问全能知识库工具AFFINE,Notion的免费开源替代
文章目录 公网访问全能知识库工具AFFINE,Notion的免费开源替代品前言1. 使用Docker安装AFFINE2. 安装cpolar内网穿透工具3. 配置AFFINE公网访问地址4. 实现公网远程访问AFFINE 公网访问全能知识库工具AFFINE,Notion的免费开源替代品 前言 AFFiNE 是一个…...
数据存储模型
1、前言 写点什么东西呢 之前大学毕设搞了个高并发模型,里面使用到了select模型,里面用到了一个内存池,支持多客户端连接、登录、消息发送,现在工作经验三年多了,开发经验积累了不少,但是对喜爱的C的一些知…...

vue3+vant 实现树状多选组件
vue3vant 实现树状多选组件 需求描述效果图代码父组件引用selectTree组件 tree组件数据格式 需求描述 移动端需要复刻Pc端如上图的功能组件,但vant无组件可用,所以自己封装一个。 效果图 代码 父组件引用 import TreeSelect from "/selectTree.vu…...

Git安装与常用命令
Git简介: Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或大或小的项目。Git是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源代码的版本控制软件。Git与常用的版本控制工具CVS、Subversion等不同,它采用了分布式…...

uni-app 使用vscode开发uni-app
安装插件 uni-create-view 用于快速创建页面 配置插件 创建页面 输入页面名称,空格,顶部导航的标题,回车 自动生成页面并在pages.json中注册了路由 pages\login\login.vue <template><div class"login">login</d…...

单线程的JS中Vue导致的“线程安全”问题
目录 现象分析原因 浏览器中Js是单线程的,当然不可能出现线程安全问题。只是遇到的问题的现象与多线程的情况十分相似,导致对不了解Vue实现的我怀疑起了人生… 现象 项目中用到了element-plus中的加载组件,简单封装了一下,用来保…...
vue2 - SuperMap3D加载基于Nginx服务生成的3DTileset模型切片服务地址
文章目录 🍍开发环境🍉1:nginx发布3Dtileset模型切片服务🍍1.1:准备3DTileset文件🍍1.2:安装nginx服务,配置相关文件1.2.1:下载nginx1.2.2:下载完解压文件如下1.2.3:将3Dtileset模型文件放置 nginx-1.24.0/html/gc 新建文件中如下:1.2.4:配置nginx服务🍉2:…...
新版本Spring Security 2.7 + 用法,直接旧正版粘贴
一、以前的用法: Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter {Beanpublic PasswordEncoder passwordEncoder(){return new BCryptPasswordEncoder();}Overrideprotected void configure(HttpSecurity http) throws Exceptio…...

JVM——类加载器(JDK8及之前,双亲委派机制)
目录 1.类加载器的分类1.实现方式分类1.虚拟机底层实现2.JDK中默认提供或者自定义 2.类加载器的分类-启动类加载器3.类加载器的分类-Java中的默认类加载器4.类加载器的分类-扩展类加载器5.类加载器的分类-类加载器的继承 2.类加载器的双亲委派机制 类加载器(ClassLo…...

(七)什么是Vite——vite优劣势、命令
vite分享ppt,感兴趣的可以下载: Vite分享、原理介绍ppt 什么是vite系列目录: (一)什么是Vite——vite介绍与使用-CSDN博客 (二)什么是Vite——Vite 和 Webpack 区别࿰…...
vue之Error: Unknown option: .devServer.
背景 在使用内网穿透工具时,加入对应的配置,启动出现报错。 一、遇到的问题 报错: Error: Unknown option: .devServer. Check out https://babeljs.io/docs/en/babel-core/#options for more information about options. Error: Unknown …...

基于ssm的房屋租售网站(有报告)。Javaee项目,ssm项目。
演示视频: 基于ssm的房屋租售网站(有报告)。Javaee项目,ssm项目。 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 项目介绍: 采用M(mode…...
LeeCode AutoX-4 计算几何
题意 传送门 LeeCode AutoX-4 蚂蚁爬行 题解 枚举每一对几何图形,判断相交性,用并查集维护连通性即可。总时间复杂度 O ( n 2 m ) O(n^2 m) O(n2m),其中 n n n 为几何图形数量, m m m 为查询数量。 根据几何图形性质分类讨…...

Vue3 动态设置 ref
介绍 在一些场景,ref设置是未知的需要根据动态数据来决定,如表格中的input框需要我们主动聚焦,就需要给每一个input设置一个ref,进而进行聚焦操作。 Demo 点击下面截图中的编辑按钮,自动聚焦到相应的输入框中。 &…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...

c#开发AI模型对话
AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...

Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...
MySQL JOIN 表过多的优化思路
当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...