1
dzdh 2022-02-21 21:18:17 +08:00 1
redis lua
incr Ymdhis, expire 1s, return get Ymdhis |
2
ClericPy 2022-02-21 22:18:14 +08:00
QPS 不是 q / secs 么... 谜底就在谜面上啊, 不分时间间隔那还叫 qps 么
PS: 语气越来越弱 |
3
ClericPy 2022-02-21 22:27:08 +08:00
@ClericPy 看了楼上才发现要问啥... 一开始以为问的公式啥的
所以如果想统计最小单位秒的某一秒真实 QPS, 每分钟生成个 60 个桶, 桶内 +1 倒是能拿到具体某秒的 q, 过期的下一个分钟丢弃. 不过性能不是最优遇到上万很容易不准, 还真没琢磨过这东西, 以前一直用分钟窗口除以 60 的... |
4
knightdf 2022-02-21 22:27:27 +08:00
1L 正解,只是去掉“expire 1s”
|
5
nl101531 OP @ClericPy 看了 sentinel 的实现,秒级的统计是滑动窗口,不过只用在限流上,分钟级统计也包含了过去的每秒,用于 dashboard
|
6
WhoMercy 2022-02-22 11:06:03 +08:00 via Android
做纯计数,粗略统计可用单独线程计数分钟级统计,根据分钟级 query 数平均计算分钟内每秒 query 数;精细统计可用循环计数队列,队列根据时间片切分,每个位置做自增原子操作,根据自增数统计时间片 query 数。
做限流,可以用循环令牌桶队列,桶队列同样根据时间片切分,每个位置预设令牌数量,每时间片的个 query 会取得(消耗)对应桶里令牌,剩余令牌数可用于计数和限流。 |