接口幂等性,qps,tps,并发量,pv,uv,脏读,不可重复读,幻读

发布时间 2023-07-31 22:26:39作者: 哈哈哈哼

1 脏读,不可重复读,幻读 ,mysql5.7以后默认隔离级别是什么?

脏读:'当一个事务读取了另一个未提交事务的数据时,称为脏读。当事务A读取到事务B尚未提交的数据时,如果事务B回滚,那么事务A读取的数据就是无效的或者不一致的,导致脏读的结果是不可靠的。'
不可重复读:'在同一个事务中,对于相同的查询,第二次读取数据时,得到的结果与第一次读取数据时不相同,称为不可重复读。不可重复读的问题在于其他事务可能在两次读取之间修改了数据,导致了结果的不一致性。'
幻读:'在同一个事务中,对于相同的查询,第二次读取数据时,得到了新增或删除的额外数据行,称为幻读。幻读问题发生在并发事务中,其中一个事务在读取数据的同时,另一个事务执行了插入或删除操作,导致第一个事务读取的数据发生了改变。'
mysql5.7以后默认隔离级别是:'可重复读'
在MySQL 5.6及之前的版本中,默认的隔离级别是"读已提交"
若要修改,需要编辑my.cnf文件
在末尾添加:transaction-isolation=READ-COMMITTED

1	读未提交	READ-UNCOMMITTED
2	读提交		 READ-COMMITTED
3	可重复读	REPEATABLE-READ
4	串行化		 SERIALIZABLE

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

qps(Queries Per Second):'每秒查询率,表示在一秒内数据库系统能够处理的查询请求数量,他是衡量系统性能的标准,越高则表示系统处理能力越来强'
tps(Transactions Per Second):'每秒事务处理量,表示在一秒内系统能够处理的事务数量,一个事务可以包括多个查询操作,因此TPS一般会小于等于QPS'
并发量:'指系统在某个时间段内处理请求的数量,也可以了理解为系统的并发链接数,并发量大则可以表示系统在某个时间段内承载了更多的请求,具备并发处理能力'
pv(Page View):'页面浏览量,表示网站或应用在一段时间内被访问的页面次数,PV是衡量网站或应用的访问量的指标,他可以用来分析用户的访问行为和访问规模'
uv(Unique Visitor):'唯一的访客,表示在一段时间内访问网站或应用的独立用户数量,UV是根据用户的设备唯一标识或ip地址等信息来区分用户的,他用来衡量网站或应用的用户数量'

#QPS(Queries Per Second)表示每秒查询率,衡量数据库系统处理查询请求数量的能力。
#TPS(Transactions Per Second)表示每秒事务处理量,衡量系统处理完整事务的能力。
#并发量指系统在某个时间段内同时处理的请求数量,是系统的并发连接数。
#PV(Page View)表示网站或应用在一段时间内被访问的页面次数,用来分析访问规模和用户行为。
#UV(Unique Visitor)表示访问网站或应用的独立用户数量,用来衡量用户数量。

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

接口幂等性:'指在分布式系统中,由于网络原因或其他原因导致请求重复发送,从而导致系统产生重复的操作或数据,比如重复扣款、重复下单、重复发送短信等'
-支付接口,重复支付会导致多次扣钱 ;订单接口,同一个订单可能会多次创建。
什么情况下,会产生接口幂等性的问题呢?
	-网络波动, 可能会引起重复请求
	-用户重复操作,用户在操作时候可能会无意触发多次下单交易,甚至没有响应而有意触发多次交易应用
	-使用了失效或超时重试机制(Nginx重试、RPC重试或业务层重试等)
	-页面重复刷新
    -使用浏览器后退按钮重复之前的操作,导致重复提交表单
    -使用浏览器历史记录重复提交表单
    -浏览器重复的HTTP请求
    -定时任务重复执行
    -用户双击提交按钮
解决方法:
	-按钮只能操作一次
    	-提交后把按钮置灰或loding状态,消除用户因为重复点击而产生重复记录
    -token机制
    	-允许重复提交,但不能产生副作用,进入页面时申请一个token,然后所有请求都带着token,后端根据token来避免重复请求,将token存入redis,请求来了之后把redis中的token清除,当重复请求来,发现没有token,不做处理。
    -使用post/redirect/get模式(PRG)
    	-在提交后执行页面重定向,在用户提交后跳转到一个重定向的信息页面,避免用户按F5刷新页面导致重复提交,而且也不会出现浏览器表单重复提交的警告,也能消除按浏览器前进或后退导致同样重复提交的问题
    -在session存放特殊标识
    	-在服务端生产一个唯一的标识符,存入session,同时前端获取到这个标识符,将这个标识符一并提交到后端,在服务器获取到前段传入的标识符,与session中的比较,如果一致,代表是首次提交,处理本次请求,移除标识符,不相等,不做处理
    -使用唯一索引防止新增脏数据
    	-利用数据库的唯一索引机制,插入数据库会抛出异常,保证不会出现脏数据
    -乐观锁:'乐观锁在操作数据时非常乐观,认为别人不会同时修改数据。. 因此乐观锁不会上锁,只是在执行更新的时候判断一下在此期间别人是否修改了数据:如果别人修改了数据则放弃操作,否则执行操作'
    	-为数据增加一个version字段,当数据需要更新时,先去数据库里获取此时的version版本号
        -更新数据时首先和版本号作对比,如果不相等说明已经有其他请求去更改新数据了,提示更新失败
    -悲观锁
    	-在获取数据时进行加锁,当同时有多个重复请求时其他请求都无法进行操作
    -分布式锁
    	-幂等的本质就是分布式锁的问题,分布式锁可以使用redis实现,在分布式环境下,锁定全局唯一资源,使请求串行化,实际表现为互斥锁,防止重复
    -缓冲队列
    	-将请求全部放入缓冲队列,使用异步任务处理队列中的数据,过滤掉重复的请求,优点:同步处理改为异步处理,高吞吐量,缺点:不能及时返回请求结果,需要后续轮训得到处理结果