在 CentOS 上部署 Redis 时,“限流”通常指 对访问 Redis 的请求进行速率限制。Redis 本身没有内建的全局 QPS 限制参数,但可以通过 架构层 + Redis 特性 实现限流。下面按常见场景给你总结。
适合:接口级、IP 级限流
key = limit:ip:192.168.1.10
INCR limit:ip:192.168.1.10
EXPIRE limit:ip:192.168.1.10 60
逻辑:
✅ 优点:简单
❌ 缺点:临界问题
使用 ZSET
ZREMRANGEBYSCORE api:limit 0 (now-60000)
ZADD api:limit now uuid
ZCARD api:limit
Redis 官方推荐的限流模块
CL.THROTTLE user:123 100 10 60
含义:
安装(CentOS):
git clone https://github.com/brandur/redis-cell
cd redis-cell
make
在 redis.conf 中:
loadmodule /path/to/libredis_cell.so
✅ 生产推荐
限制单 IP 连接频率:
iptables -A INPUT -p tcp --dport 6379 \
-m limit --limit 10/minute --limit-burst 5 \
-j ACCEPT
redis.conf:
maxclients 1000
超出会拒绝连接。
maxmemory 2gb
maxmemory-policy allkeys-lru
如果 Redis 通过 HTTP 暴露:
limit_req_zone $binary_remote_addr zone=redis:10m rate=10r/s;
location /redis {
limit_req zone=redis burst=20 nodelay;
}
bind 127.0.0.1
protected-mode yes
requirepass yourpassword
rename-command FLUSHALL ""
| 场景 | 推荐方案 |
|---|---|
| 接口限流 | Redis-Cell |
| 简单控制 | INCR + EXPIRE |
| 防止连接风暴 | maxclients + iptables |
| 高并发生产 | 代理层 + Redis-Cell |
如果你能说明:
我可以给你一份 可直接用的配置示例。