如何按秒统计对外服务最大并发请求量
来源:互联网 发布:假病例制作软件 编辑:程序博客网 时间:2024/06/08 19:34
主要使用reids的sorted set,主要命令:
zremrangebyscore:
语法:zremrangebyrank key start stop
解释:移除有续集中指定排名范围【start stop】的元素,返回移除元素个数
zincrby
语法:zincrby key increment member
解释:有续集key的member增加增量increment,返回增加后的score
zrevrank
语法:zrevrank key member
解释:根据score从高到低排序,返回member在有序集key中的index
思路:
1、每个IP或者接入应用有一个sorted set,每天一个
2、每秒一个key,一个请求增加zincrby +1,对应member名称为到秒的key比如: 2017121413131313
3、zrevrank对队列排序,返回最高的N个数值,如果不满足数量要求,不进行下面4操作
4、根据下标,删除sorted set其他的数值
存在问题: 会把当前插入的这个秒的给删除,改进建议
a)每秒单独建一个key(String的数据结构即可),设置生效时间5秒,入sorted set队列只是当前时间5秒前的数据,已经完成统计
b)针对队列中的数据排序处理不会有更新的操作,非常稳定,最多是最近这几秒的峰值统计不出来
c)要考虑排序集合排序的消耗,其中不保留很多的数据
最终伪代码如下:
1 HINCRBY Hash队列key 当前时间到秒 12 HGET 从Hash队列key获得小于当前时间N秒的数据3 if 存在4 ZADD 放到sorted set 5 ZREVRANK sorted set排序6 ZREMRANGEBYSCORE 对sorted set 进行截断((按照排序,保留最大的),只保留最新的M条数据7 end if
进一步修订:如果多个人获得一个秒的key,可能会会导致zset中同一秒有多个值插入,解决方法:
方法1: 使用redis的锁, 使用setnx,参考: https://www.cnblogs.com/liuyang0/p/6744076.html
方法2: 步骤2更改为一个lua脚本,获得数据的时候直接将对应的key删除,保证事务性
参考:
Redis基础、高级特性与性能调优 https://www.cnblogs.com/276815076/p/7245333.html
- 如何按秒统计对外服务最大并发请求量
- 如何提高web 服务的并发量
- 如何提高web 服务的并发量
- 如何获知服务的并发量
- 5.7.4 并发量统计
- mysql最大并发量测试
- 如何让虚拟机对外提供服务
- java对外提供服务接口如何写?
- 服务器如何提高并发量
- 服务器如何提高并发量
- 修改mysql的最大并发连接量
- shell 简单统计每月每天请求量
- 每秒处理请求数不等于并发量
- kubernetes服务对外发布
- 如何提高服务器的并发量
- 如何限制窗体的最大改变量
- 如何限制Samba服务中一个共享的最大并发连接数?
- iOS 多线程编程<十、NSOperationQueue最大并发量、暂停、取消>
- 电路分析计算必备数学知识----导数与微积分计算(未完)
- 什么是反向代理
- nginx无法获取真实ip的问题
- myrocks store format 举例
- dubbo-admin管理平台搭建
- 如何按秒统计对外服务最大并发请求量
- Python 3 多线程下载百度图片搜索结果
- docker 容器和镜像管理
- InheritableThreadLocal和ThreadLocal
- 使用sqlserver触发器同步两张表数据
- 如何解决intelligent idea 搜狗输入框不跟随问题
- MySQL · 引擎特性 · DROP TABLE之binlog解析
- JIRA环境搭建与配置(二)
- macOS开发,发现webview连接不上网络。。已解决