基于Redis的分布式限流

本文探讨了使用Redis进行分布式限流的两种方法,包括非脚本和脚本(Lua)实现。非脚本实现存在竞态条件和限速不均匀的问题,而脚本实现通过Lua保证原子性并提供均匀限速。在Redis集群环境中,使用Lua脚本尤其重要,以确保所有操作在同一槽中进行。

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

遇到这种场景:要求某个接口1s最多请求10次,在分布式环境下guava的RateLimiter用不上。redis可以满足需求,于是baidu一下redis分布式限流的代码实现,总结看基本分为两种,脚本实现、非脚本实现。非脚本实现缺点明显,lua实现优势满满,肯定用lua啊啊啊啊。但是还是要看下非脚本实现的坑在哪里,lua实现的两种方式:均匀实现和非均匀实现。当然用lua的均匀实现方式是最好用的,也是推荐的。

看具体的实现之前,还是给一个场景:限定登录接口1s最多请求5次

非脚本实现

实现思路:用String结构,value存储当前登录次数,设置key的过期时间是1s。所以只要key没过期并且value<10就可以继续登录。

private boolean accessLimit(String ip, int limit, int time, Jedis jedis) {
   
   
    bool
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值