(脏读,不可重复读,幻读 ,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 默认的隔离级别是 **可重复读**

2 什么是qps,tps,并发量,pv,uv

**QPS(Queries Per Second):** 表示每秒查询次数,通常用于衡量系统的查询处理能力。
**TPS(Transactions Per Second):** 表示每秒事务处理的数量,通常用于衡量系统的事务处理能力。
**并发量(Concurrency):** 表示系统同时处理的请求数量。高并发指系统能够同时处理大量请求。
**PV(Page Views):** 表示页面浏览量,即网站在一段时间内被访问的总次数。
**UV(Unique Visitors):** 表示独立访客数量,即在一段时间内访问网站的不同访客数量。

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 = True
        t.start()

    # 模拟 QPS
    start_time = time.time()
    for _ in range(qps):
        request_queue.put("query")

    # 等待所有查询完成
    request_queue.join()

    # 计算消耗的时间
    elapsed_time = time.time() - start_time
    print(f"QPS: {qps}, Concurrency: {concurrency}, Elapsed Time: {elapsed_time:.2f} seconds")

# 测试
simulate_qps_and_concurrency(qps=10, concurrency=5)

3 什么是接口幂等性问题,如何解决?

- **问题描述:** 
	接口幂等性是指同一请求的重复执行不会产生不同的效果,即无论调用一次还是多次,系统的状态都是一致的。

- **解决方案:**
  1. **唯一标识符:** 为每个请求生成一个唯一标识符,通过这个标识符来判断请求是否已经被处理。
  2. **幂等接口设计:** 接口本身应该设计成幂等的,即多次调用不会产生额外的影响。
  3. **使用 Token:** 在请求中包含一个令牌,服务器验证令牌的有效性,避免重复执行。
  4. **数据库乐观锁:** 在数据库层面使用乐观锁机制,确保同一数据项在同一时间只能被处理一次。

保证接口的幂等性对于处理因网络问题、重试或其他原因导致的重复请求是非常重要的。

3.1 通过添加唯一标识符保证接口的幂等性

import uuid

class 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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/144594.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

智慧隧道:TSINGSEE青犀远程视频AI智能监管平台保障隧道施工安全

一、背景与需求分析 随着我国交通运输量的增加以及新基建的不断规划和建设,公路建设工作也在持续开展中。高速公路隧道属于特殊构造段,因为隧道空间小,密闭性强,施工过程中一旦发生火灾、事故等,将带来重大人员伤亡和…

身份证照片怎么弄成200k以内?超级好用!

一些网站为了限制大的文件上传,提出了一些大小限制的要求,那么身份证如何弄成200k呢?下面介绍三种方法。 方法一: 使用嗨格式压缩大师 1、在电脑上打开安装好的软件,在首界面中点击“图片压缩”。 2、进入后上传需要…

Vue CLI脚手架安装、搭建、配置 和 CLI项目分析

目录 一、CLI快速入门 1. 官方介绍 : 2.安装Vue CLI : 3.搭建Vue CLI : 4.IDEA配置Vue CLI : 二、Vue CLI项目分析 1.结构分析 : 1.1 config 1.2 node_modules 1.3 src 1.4 static 2.流程分析 : 2.1 main.js 2.2 router/index.js 2.3 components/HelloWorld.vue 2.4 A…

“糖尿病日”感言

长期旺盛的写作欲,今天忽地就莫名其妙地衰退下来了。感到浑身都不舒服,特别是过去从未出现过的腰微痛、乏力现象发生了。 转念一想,或是老龄人一日不如一日的正常反应吧?而且,今天恰逢“ 联合国糖尿病日”&#xff0c…

mysql之MHA

1、定义 全称是masterhigh avaliabulity。基于主库的高可用环境下可以实现主从复制及故障切换(基于主从复制才能故障切换) MHA最少要求一主两从,半同步复制模式 2、作用 解决mysql的单点故障问题。一旦主库崩溃,MHA可以在0-30…

Spark读取excel文件

文章目录 一、excel数据源转成csv二、Spark读取csv文件(一)启动spark-shell(二)读取csv生成df(三)查看df内容一、excel数据源转成csv 集群bigdata - ubuntu: 192.168.191.19master(bigdata1) - centos: 192.168.23.78 slave1(bigdata2) - centos: 192.168.23.79 slave2(b…

多商家签到打卡奖励免单霸王餐小程序开发

多商家签到打卡奖励免单霸王餐小程序开发 用户注册和登录:提供用户注册和登录功能,以便用户能够参与签到打卡活动。 商家入驻:商家可申请入驻平台,提交相关资料并等待平台审核,审核通过后即可发布活动和奖励。 签到打…

组件库篇 | EUI | 补充知识

组件库篇 | EUI | 补充知识 编码 项目中请务必使用Unicode编码,否则会出现中文乱码问题。 设置方法:使用VS打开项目,项目-属性-高级-字符集-Unicode编码。 数据类型 C语言中的常用数据类型不作讲解,主要讲解一些C语言初学者不熟悉的类型。这些类型大都只需要你传参,因此…

风景照片不够清晰锐利,四招帮你轻松解决

我们大家在拍摄风景照的时候都希望能够拍摄出清晰锐利的照片。可能会有人问:“什么是锐利?”我们可以从锐度来给大家简单解说下。锐度是反映图片平面清晰度和图像边缘对比度的一个参数。锐度较高的画面,微小的细节部分也会表现得很清晰&#…

SQL基础理论篇(二):什么是DBMS / DB / DBS

文章目录 简介DB、DBS和DBMS的区别当前的主流DBMSSQL与NoSQL主流的RDBMS参考文献 简介 日常工作中,我们通常是跟DBMS这些数据库管理软件打交道,而SQL只是它们的通用语言而已。 DB、DBS和DBMS的区别 DBMS,全称是DataBase Management System…

外汇天眼:如何摆脱交易困境?这个比赛告诉你答案!

在现今的金融市场中,外汇交易因其高杠杆、24小时交易等特点吸引着众多投资者。然而,外汇交易并非易事,它需要精准的分析、及时的决策和良好的风险管理。许多新手投资者在涉足外汇市场时都会遇到各种困境,譬如缺乏实践经验、心理压…

流量分析(信息安全铁人三项赛分区赛2-5.18)

题目描述 目录 题目描述 黑客的IP是多少 服务器1.99的web服务器使用的CMS及其版本号(请直接复制) 服务器拿到的webshell的网址(请输入url解码后的网址) 服务器1.99的主机名 网站根目录的绝对路径(注意最后加斜杠) 黑客上传的第一个文件名称是什么 黑客进行内网扫描&am…

【文章学习系列之模型】DAGMM

本章内容 文章概况模型结构损失函数实验结果实验分析总结 文章概况 《Deep Autoencoding Gaussian Mixture Model for Unsupervised Anomaly Detection》是2018年发表于ICLR的一篇论文,该论文提出一种端到端的无监督异常检测方法DAGMM,取得了不错的效果…

Sentinel底层原理(下)

1、概述 Sentinel的核心原理,也就是前面提到暗流涌动的SphU.entry(…)这行代码背后的逻辑。 Sentinel会为每个资源创建一个处理链条,就是一个责任链,第一次访问这个资源的时候创建,之后就一直复用,所以这个处理链条每…

C#几种截取字符串的方法

在C#编程中,经常需要对字符串进行截取操作,即从一个长字符串中获取所需的部分信息。本文将介绍几种常用的C#字符串截取方法,并提供相应的示例代码。 目录 1. 使用Substring方法2. 使用Split方法3. 使用Substring和IndexOf方法4. 使用Regex类…

【PTQ】Cross-Layer Equalization跨层均衡-证明和实践详细解读

Cross-Layer Equalization跨层均衡 aimet解读 符合规则的模型结构 统一要求:单数据流,中间激活不流向其他地方概念说明: Conv: gruoups1的普通卷积,包括TransposedConv和ConvDepthwiseConv: 深度可分离卷积,groupsi…

青少年编程学习 等级考试 信奥赛NOI/蓝桥杯/NOC/GESP等比赛资料合集

一、博主愚见 在当今信息技术高速发展的时代,编程已经成为了一种必备的技能。随着社会对于科技人才的需求不断增加,青少年编程学习正逐渐成为一种趋势。为了更好地帮助青少年学习编程,提升他们的技能和素质,博主结合自身多年从事青…

C++:map和set的封装原理

文章目录 红黑树的封装map和set的封装红黑树迭代器的实现operator 和 -- 的实现的实现过程 迭代器的其他模块 整体实现 本篇写于红黑树模拟实现后,对map和set进行封装,模拟实现map和set内部的原理 首先,map和set的底层逻辑是红黑树&#xf…

idea生成代码(一):实现java语言的增删改查功能(基于EasyCode插件)支持自定义模板【非常简单】

idea生成代码(一):实现java语言的增删改查功能(基于EasyCode插件)支持自定义模板【非常简单】 idea生成代码(二):实现java语言的增删改查功能(基于mybatis-plus代码生成器…

centralwidget 不能布局

必须要在QT ui中添加一个任意的子控件(比如添加了一个pushButton),然后在centralwidget 才能右键设置布局,成功去掉centralwidget 右下角的红色的标记。
最新文章