Redis Cell
分布式限流模块, 可以原子性地处理限流操作.
Install
该模块是用 Rust 写的, 需要先 brew install rust
git clone --depth 1 https://github.com/brandur/redis-cell.git
cd redis-cell
cargo build --release
cd ..
./src/redis-server --port 7777 --loadmodule ./redis-cell/target/release/libredis_cell.dylib
./src/redis-cli -p 7777
Command
CL.THROTTLE user123 15 30 60 1
▲ ▲ ▲ ▲ ▲
| | | | └───── 处理1个, 可选项, 默认1个
| | └──┴─────── 30 tokens / 60 seconds, 每60秒处理30个
| └───────────── 15 漏斗最大容量
└─────────────────── key
1) (integer) 0 # 0 允许; 1 拒绝
2) (integer) 16 # 漏斗容量
3) (integer) 15 # 漏斗剩余空间
4) (integer) -1 # 如果被拒绝后的重试时间
5) (integer) 2 # 清空漏斗所需要的时间
先填满漏斗, 如果漏斗已满, 新入的请求会被拒绝.
返回的漏斗容量是漏斗容量参数值+1.
Reference
https://github.com/brandur/redis-cell
https://en.wikipedia.org/wiki/Generic_cell_rate_algorithm
https://www.jianshu.com/p/1b026b874c40?from=timeline&isappinstalled=0