温馨提示×

centos redis配置如何限流

小樊
43
2026-09-21 03:43:38
栏目: 云计算

在 CentOS 上部署 Redis 时,“限流”通常指 对访问 Redis 的请求进行速率限制。Redis 本身没有内建的全局 QPS 限制参数,但可以通过 架构层 + Redis 特性 实现限流。下面按常见场景给你总结。


一、使用 Redis 自身实现「应用级限流」(最常用)

1️⃣ 基于计数器(简单限流)

适合:接口级、IP 级限流

key = limit:ip:192.168.1.10
INCR limit:ip:192.168.1.10
EXPIRE limit:ip:192.168.1.10 60

逻辑:

  • 每分钟 INCR 一次
  • 超过阈值(如 100)则拒绝

✅ 优点:简单
❌ 缺点:临界问题


2️⃣ 基于滑动窗口(推荐)

使用 ZSET

ZREMRANGEBYSCORE api:limit 0 (now-60000)
ZADD api:limit now uuid
ZCARD api:limit
  • 60 秒内只允许 N 次请求

3️⃣ Redis-Cell 模块(专业限流)

Redis 官方推荐的限流模块

CL.THROTTLE user:123 100 10 60

含义:

  • 100 容量
  • 每 60 秒补充 10 个

安装(CentOS):

git clone https://github.com/brandur/redis-cell
cd redis-cell
make

在 redis.conf 中:

loadmodule /path/to/libredis_cell.so

✅ 生产推荐


二、在 CentOS 层面限制 Redis 访问

1️⃣ 防火墙限流(iptables)

限制单 IP 连接频率:

iptables -A INPUT -p tcp --dport 6379 \
-m limit --limit 10/minute --limit-burst 5 \
-j ACCEPT

2️⃣ 限制 Redis 最大连接数

redis.conf:

maxclients 1000

超出会拒绝连接。


3️⃣ 限制内存(防止被打爆)

maxmemory 2gb
maxmemory-policy allkeys-lru

三、使用代理层限流(生产推荐)

1️⃣ Redis + Nginx(外部接口)

如果 Redis 通过 HTTP 暴露:

limit_req_zone $binary_remote_addr zone=redis:10m rate=10r/s;

location /redis {
    limit_req zone=redis burst=20 nodelay;
}

2️⃣ 使用 Twemproxy / Codis

  • 统一入口
  • 可限流、鉴权、分片

四、CentOS 上 Redis 安全 & 限流建议

bind 127.0.0.1
protected-mode yes
requirepass yourpassword
rename-command FLUSHALL ""

五、方案选择建议

场景 推荐方案
接口限流 Redis-Cell
简单控制 INCR + EXPIRE
防止连接风暴 maxclients + iptables
高并发生产 代理层 + Redis-Cell

如果你能说明:

  • Redis 版本
  • 是否公网暴露
  • 限流对象(IP / 用户 / 接口)

我可以给你一份 可直接用的配置示例。

0 踩