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