Redis(六)——限流算法:滑动时间窗口限流和漏斗限流

本文介绍了限流的重要性,并详细探讨了Redis中的滑动窗口算法和漏斗算法。滑动窗口利用ZSet数据结构实现,记录时间窗口内的操作次数以限制请求。漏斗算法通过模拟漏水过程控制流量,Redis-Cell模块提供了基于漏斗算法的限流指令。此外,文章还提及了额外的令牌桶限流算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文主要总结自《redis深度历险》

限流的意义

限流一般是指在一个时间窗口内对某些操作请求的数量进行限制,比如一个论坛限制用户每秒钟只能发一个帖子,每秒钟只能回复5个帖子。限流可以保证系统的稳定,限制恶意请求,防止因为流量暴增导致系统瘫痪宕机。常用的限流算法有:滑动窗口、漏斗以及令牌桶。

滑动窗口算法rolling Window

以限制用户行为为例子,比如一秒内进行某个操作50次,这种行为应该进行限制。

滑动窗口就是记录一个滑动的时间窗口内的操作次数,操作次数超过阈值则进行限流。

网上找的图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-48XTMP04-1597314262638)(03532A973D8B410F846D511C90189127)]


在redis中可以用zset数据结构来实现这个功能:

用唯一的id作为zset的key,可以是user_id + action_key ,value是当前操作的时间戳。每次新的操作请求进来时,先判断当前时间窗口内记录的操作次数 count,小于阈值max则允许进行操作,超过阈值则进行限流。同时对时间窗口之外的数据进行清理,节省内存。

简单代码实现:

public boolean isActionAllowed(String userId, String actionKey, int
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值