安装redis

wget https://download.redis.io/releases/redis-6.2.6.tar.gz

tar xzf redis-6.2.6.tar.gz

cd redis-6.2.6

make

分布式服务的限流实现(基于redis),大致有以下三种方案:

redis lua分布式限流 redis分布式限流方案_限流

 

1. redis+module插件实现。

该方案性能最高,直接在redis添加插件实现,一般自建redis平台易实施此方案。

实施案例:基于漏斗算法的开源redis-cell实现。

git clone https://github.com/onsigntv/redis-rate-limiter.git
cd redis-rate-limiter
make
cp ratelimit.so /path/to/modules/
vi redis.conf

在配置中添加如下:

loadmodule /path/to/modules/ratelimit.so

cd src
./redis-server ../redis.conf &

redis lua分布式限流 redis分布式限流方案_redis_02

测试如下: 

redis lua分布式限流 redis分布式限流方案_redis_03

 

2. redis+lua原子操作。

 本方案强烈建议云平台服务使用。

将操作redis的限流算法在lua脚本内实现,灵活性极强。具体的限流算法可参加:常见的五种服务限流算法及其实现

若因流量导致瓶颈,可优化lua内容为sha1进行请求调用。

3. redis+分布式锁。

分布式锁本质还是lua实现,而且中间会多次调用redis服务,性能最低,不建议使用。