Redis应用实践——简单限流与漏斗限流
简单限流
实现原理就是使用zset结构,加上滑动窗口的思路来实现简单的时间窗口滑动。
zset的score存储时间戳。
代码中使用zremrangebyscore把时间窗口之前的访问记录都砍掉。
给每个新的记录设置一个过期时间(时间窗口的长度 可以再+1s)
漏斗限流
如果自己实现一个漏斗算法需要如下
定义容量、漏水速率、漏水时间、剩余容量等
每次请求的时候用当前时间乘漏斗速率,看看需要的空间能不能满足需要的空间。
redis中提供的漏斗限流
Redis4.0中开始提供了一个限流模块:REdis-Cell,该模块提供了限流算法,并且提供了原子命令。
该模块只有一条指令cl.throttle
使用方法cl.throttle key 15 40 60 1
15 :漏斗容量
40 60: 40 operations /60 seconds 漏斗速率
1:可选参数 quota