首页 > 其他分享 >什么是qps,tps,并发量,pv,uv、接口幂等性、悲观锁乐观锁

什么是qps,tps,并发量,pv,uv、接口幂等性、悲观锁乐观锁

时间:2024-06-15 15:25:06浏览次数:11  
标签:pv 修改 uv --- 并发 version tps 线程 数据

它们都是衡量软件好坏的标准

 1 1.qps:Queries Per Second,每秒查询率,一台服务器每秒能够响应的查询次数,每秒的响应请求数
 2         -如何估算自己项目的QPS?--取决于:并发量和平均响应时间
 3             0.1s * 10 =1s
 4             -并发量:同一时刻,能并发几个,假设并发量是1 
 5             -平均响应时间是0.1 
 6             -qps是10
 7 
 8 
 9 2. TPS:Transactions Per Second,是每秒处理的事务数,包括一条消息入和一条消息出,加上一次用户数据库访问
10     TPS 的过程包括:客户端请求服务端、服务端内部处理、服务端返回客户端。
11     例如,访问一个 Index 页面会请求服务器 3 次,包括一次 html,一次 css,一次 js,那么访问这一个页面就会产生一个T,产生三个Q(代表3次请求)
12 
13 
14     
15 3.并发量
16     系统同时处理的请求或事务数,可以直接理解为:系统同时处理的请求数量
17     QPS = 并发量 / 平均响应时间 
18     并发量 = QPS * 平均响应时间 
19     例如当前系统QPS为1w,每个请求的响应时间都是2s,那么并发量就是2w 
20 
21 
22 4.PV
23     PV(Page View):页面访问量,即页面浏览量或点击量,用户每次刷新即被计算一次。可以统计服务一天的访问日志得到--->
24         比如咱么路飞项目--》记录课程访问量
25         查询课程详情接口中---》加入 redis自增(course_view)
26 
27 
28 5.UV
29     UV(Unique Visitor):独立访客,统计1天内访问某站点的用户数。可以统计服务一天的访问日志并根据用户的唯一标识去重得到
30 
31 
32 
33 6. DAU(日活)
34     DAU(Daily Active User),日活跃用户数量。常用于反映网站、app、网游的运营情况。
35     DAU通常统计一日(统计日)之内,登录或使用了某个产品的用户数(去除重复登录的用户),与UV概念相似
36 
37 
38 
39 7.MAU(月活)
40     MAU(Month Active User):月活跃用户数量,指网站、app等去重后的月活跃用户数量

 

 

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

 1 # 幂等:幂等(idempotent、idempotence)是一个数学与计算机学概念
 2     -一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同
 3     -接口幂等性:无论调用多少次,产生的效果是一样的
 4        -get 获取数据天然幂等
 5        -put 修改数据天然幂等
 6            -修改库存(数字加减):不幂等
 7        -delete 删除 天然幂等
 8        -post 新增数据,会出现不幂等的情况,要把它做成幂等性的
 9         
10 # 解决方案:
11    # token机制
12         1、下单接口的前一个接口,只要一访问,后端生成一个随机字符串,存到redis中,把随机字符串返回给前端
13         2、然后调用业务接口请求时,把随机字符串携带过去,一般放在请求头部
14         3、服务器判断随机字符串是否存在redis中,存在表示第一次请求,然后redis删除随机字符串,继续执行业务。
15         4、如果判断随机字符串不存在redis中,就表示是重复操作,直接返回重复标记给client,这样就保证了业务代码,不被重复执行
16         
17         
18   #  乐观锁机制---》更新的场景中
19        update t_goods set count = count -1 , version = version + 1 where good_id=2 and version = 1
20     -扣减id为2的商品库存---》进入到扣减页面---》数据库中查一下这个数据的version号[假设是10]
21     -访问扣减库存接口---》带着之前的version来了
22     -后端的sql如下:
23     update t_goods set count = count -1 , version = version + 1 where good_id=2 and version = 10
24     -第一次可以顺利扣减
25     -第二次:带的版本号还是10---》sql执行失败了--->扣减不了了
26     
27     
28  # 唯一主键
29     这个机制是利用了数据库的主键唯一约束的特性,解决了在insert场景时幂等问题。但主键的要求不是自增的主键,这样就需要业务生成全局唯一的主键
30     
31  # 唯一ID(unique)
32     调用接口时,生成一个唯一id,redis将数据保存到集合中(去重),存在即处理过
33     前端来到下单页面,前端生成唯一id,只要下单,带着这个唯一id到后端---》后端取出来--》存到reids中--》继续后续操作---》带着同样的id过来,redis中有了,这个就不继续执行了
34     
35  # 防重表
36     使用订单号orderNo做为去重表的唯一索引,把唯一索引插入去重表,再进行业务操作,且他们在同一个事务中。这个保证了重复请求时,因为去重表有唯一约束,导致请求失败,避免了幂等问题。
37     这里要注意的是,去重表和业务表应该在同一库中,这样就保证了在同一个事务,即使业务操作失败了,也会把去重表的数据回滚。这个很好的保证了数据一致性。
38     
39  # 前端:
40     按钮只能点击一次
41     
42 
43 ---------------------------------------------------------------------------------
44 补充:悲观锁乐观锁
45 
46 悲观锁和乐观锁是多线程并发编程中的两种思想,主要用于解决在并发环境下对共享资源的访问和修改问题。以下是关于这两种锁的详细解释:
47 
48 悲观锁
49 定义:
50 
51 悲观锁假定在修改数据的时候,其他线程很可能也会同时修改该数据,导致数据的不一致。因此,它采取一种保守的策略,即在修改数据之前先对数据进行加锁,阻止其他线程对该数据进行访问或修改。
52 实现原理:
53 
54 悲观锁最典型的实现方式是使用数据库的排他锁(Exclusive Lock)或数据库的行级锁。
55 当一个线程尝试修改数据时,它会先尝试为该数据加上排他锁。如果加锁成功,则可以进行修改;如果加锁失败(表示该数据正在被其他线程修改),则当前线程需要等待或抛出异常。
56 在整个修改过程中,数据都会被锁定,直到事务完成并提交后才会释放锁。
57 特点:
58 
59 以更多时间的代价来保证数据的完整性。
60 效率低,但安全性高。
61 乐观锁
62 定义:
63 
64 乐观锁则假定在修改数据时,其他线程一般不会同时修改该数据,因此它不会立即对数据进行加锁。而是在数据提交更新时,才会正式对数据的冲突与否进行检测。
65 实现原理:
66 
67 乐观锁的实现主要基于版本号(Version)或时间戳(Timestamp)机制。
68 在每次更新数据时,都会先获取当前数据的版本号或时间戳,并在更新时检查该版本号或时间戳是否与数据库中的版本号或时间戳一致。
69 如果一致,则表示数据没有被其他线程修改过,可以执行更新操作,并将版本号或时间戳进行自增;如果不一致,则表示数据已被其他线程修改,更新操作会失败。
70 特点:
71 
72 效率高,但安全性相对较低。
73 适用于多读少写的场景。
74 总结
75 悲观锁和乐观锁各有优缺点,适用于不同的场景。悲观锁适用于写操作频繁的场景,可以确保数据的一致性和安全性;而乐观锁则适用于读操作远多于写操作的场景,可以提高系统的并发性能和吞吐量。在选择使用哪种锁时,需要根据具体的应用场景和需求进行权衡。

 

标签:pv,修改,uv,---,并发,version,tps,线程,数据
From: https://www.cnblogs.com/liuliu1/p/18249320

相关文章

  • 《pvz植物大战僵尸杂交版》V2.0.88整合包火爆全网,支持安卓、ios、电脑等!
    今天来给大家安利一款让人欲罢不能的游戏——《植物大战僵尸·杂交版》2.0.88版。这可不是普通的植物大战僵尸,它可是席卷了B站,火爆全网的存在!先说说这个版本,它可是网络上现存最全的植物大战僵尸杂交版整合包。里面不仅有修改工具,还有超强通关存档和高清工具,简直是玩家的福音。......
  • Boruvka求最小生成树
    写在前面这是我学这个算法的时候看的博客:推荐博客(除了这个还看了老师发的资料)为了复习以及加深理解,来简单写一篇学习笔记(预计半小时写完)关于Boruvka起因是在模拟赛遇到的T3。大意是:对于给出的完全图,\(w_{(u,v)}=a_{\max{(u,v)}}-a_{\min{(u,v)}}\),求最小生成树。烧烤了半场......
  • http和https的区别是什么
    HTTP(超文本传输协议)和HTTPS(安全超文本传输协议)是互联网上用于传输数据的两种主要协议。它们的主要区别在于数据传输的安全性。1.安全性:-HTTP:不加密,数据以明文形式传输,容易被截获和篡改,因此存在安全风险。-HTTPS:在HTTP的基础上增加了SSL/TLS协议,对数据进行加密,确保数......
  • nginx配置https访问
    1、配置文件内容如下:worker_processes1;events{worker_connections1024;}error_log/tmp/error.loginfo;http{includemime.types;default_typeapplication/octet-stream;log_formatmain'$remote_addr-$remote_user[$time_local]&qu......
  • kubernetes-PV与PVC 的关系与绑定的条件
    PV:声明这个资源是一个持久卷(PV)。PVC:声明这个资源是一个持久卷声明(PVC)。创建yaml配置apiVersion:v1kind:PersistentVolume#PV是集群中的一块存储,可以由PVC请求并使用。-虚拟存储-实体机的存储、不是容器中的存储metadata:name:postgresql-pvnamespace:......
  • 为 AList 添加 MPV 支持
    动机最近开始尝试折腾MPV播放器.本地没有什么视频,于是就想着用AList挂载网盘,再用本地播放器播放网盘中的视频.但是查了一下,AList官方并没有添加MPV的支持,原因是MPV不提供scheme-handler(可不可以增加MPV播放器支持?).但是我发现了这个项目,作者用Rust编......
  • 使用getaddrinfo函数来获取并打印出www.baidu.com的所有IP地址(IPv4和IPv6)
    #include<stdlib.h>#include<string.h>#include<sys/types.h>#include<sys/socket.h>#include<netdb.h>#include<arpa/inet.h>intmain(){structaddrinfohints,*res,*p;intstatus;charipstr[INET6_AD......
  • kuberbetes-PVC与PV的创建 和绑定
    PVC与PV的创建如下yaml文件apiVersion:v1kind:PersistentVolume#PV是集群中的一块存储,可以由PVC请求并使用。-虚拟存储-实体机的存储、不是容器中的存储metadata:name:postgresql-pvnamespace:ops-systemspec:storageClassName:nfs#指定了与此PV关联......
  • 42、k8s-数据存储-高级存储-pv和pvc、NFS服务器
    PV(PersistentVolume)是持久化卷的意思、是对底层的共享存储的一种抽象、一般情况下PV有kubernetes管理员进行创建和配置、他与底层具体的共享存储技术有关、并通过插件完成于共享存储的对接PVC(PersistentVolumeClaim)是持久卷声明的意思、是用户对于存储需求的一种声明、换句话......
  • 奶爸suv
    以下是一些国产大型SUV的推荐:理想L9:售价42.98-45.98万元。这是一款主要面向家庭用户打造的SUV,车身尺寸为5218/1998/1800mm,轴距为3105mm,车内采用6座布局1。问界M9:售价46.98-56.98万元。问界M9被视作理想L9的第一竞争对手,尺寸为5230/1999/1800mm,轴距为3110mm,车内也采用的是6座布局1......