(9)Redis 如何限制短信发送

题目:同一IP一分钟内只能发送100次

概要:1、窗口、2令牌桶 、redis+lua 3漏斗

一、固定/滑动窗口

1、固定窗口:string存,IP为key,value自增存次数>100就限制。设置超时时间1分钟,1分钟后key消失。

    性能好,实现简单,耗内存少。

    不精准:第一个请求0s到达,剩下99在60s,61s来100个请求,60-61s有199

2、滑动窗口:IP为key,value=list(每次访问的时间戳),每次访问查询list,拿前100个跟当前时间戳比较

    时间控制精确,性能不好,实现相对复杂,耗内存多

二、令牌桶

令牌桶:限制平均传输速率外,允许突发流量

漏斗:强行限制传输速率

RateLimit限流  、 redis+lua :https://www.jianshu.com/p/cb3cc0c21f71

(9)Redis 如何限制短信发送_第1张图片
(9)Redis 如何限制短信发送_第2张图片

三、漏斗

redis4.0提供漏斗算法Redis Cell,redis只提供命令cl.throttle

被拒绝就丢弃或重试。cl.throttle连重试时间都算好,直接取返回结果数组的第四个值进行sleep,如不想阻塞线程,异步定时任务重试

(9)Redis 如何限制短信发送_第3张图片
(9)Redis 如何限制短信发送_第4张图片

实现

1、定义,根据上次水流动的时间,腾出已流出的空间

(9)Redis 如何限制短信发送_第5张图片
(9)Redis 如何限制短信发送_第6张图片

2、漏斗限速方法

(9)Redis 如何限制短信发送_第7张图片

https://blog.csdn.net/weixin_48502062/article/details/109369706

令牌桶  https://www.cnblogs.com/orangesea/articles/11299557.html

漏斗  https://mp.weixin.qq.com/s/3d_USEzLf-eLSBj_qS9jng

你可能感兴趣的:((9)Redis 如何限制短信发送)