[toc]
| 单词 | 词性 | 音标 | 含义 |
|---|---|---|---|
| protected | adj. | /prəˈtektɪd/ | 受保护的(protected-mode,开启时仅允许本地连接) |
| bind | v. | /baɪnd/ | 绑定(指定 Redis 监听哪些 IP 地址) |
| requirepass | n. | /rɪˈkwaɪə(r)pɑːs/ | 全局密码(requirepass 设置访问密码) |
| ACL | n. | /ˌeɪ siː ˈel/ | 访问控制列表(Redis 6+ 按用户分配命令/键权限) |
| maxmemory | n. | /mæks ˈmeməri/ | 最大内存(写满后按策略淘汰键) |
| eviction | n. | /ɪˈvɪkʃn/ | 淘汰(内存超限删除键释放内存) |
| LRU | n. | /ˌel ɑː ˈjuː/ | 最近最少使用(淘汰长时间未访问的键) |
| LFU | n. | /ˌel ef ˈjuː/ | 最不经常使用(淘汰访问频率最低的键) |
| supervised | adj. | /ˌsuːpəˈvaɪzd/ | 被监管的(supervised systemd,配合 systemd 管理) |
| monitor | v./n. | /ˈmɒnɪtə(r)/ | 监控(MONITOR 实时查看所有命令;INFO 查看运行状态) |
Lecture12-Redis-生产配置与安全
目标:把前面学的配置汇总成一份可上生产的 Redis 配置,重点讲安全(保护模式/绑定/ACL)、内存管理(淘汰策略)、systemd 服务化与监控。
1、安全配置
1、保护模式(protected-mode)
保护模式开启时,且未设置密码,Redis 只接受本地连接(127.0.0.1),避免暴露到外网被攻击。
protected-mode yes
要让局域网其它机器访问时,不建议关闭保护模式,而是配置好
bind+requirepass:Redis 6 只需配其中一个即可放行;Redis 7 起受保护模式下两个都要配才放行。
2、bind(IP 绑定)
限制 Redis 监听的网卡地址,只允许指定来源连接:
# 仅本机
bind 127.0.0.1
# 内网网卡(推荐生产:只监听内网 IP,防止外网直连)
bind 192.168.100.100
# 全部(开发方便,生产不推荐)
bind 0.0.0.0
多个 IP 写在同一行用空格分隔:
bind 127.0.0.1 192.168.100.100(分行写会被覆盖)。
3、密码:requirepass 与 ACL
①全局密码(简单)
requirepass atguigu
客户端连接后要先 auth:
redis-cli -a atguigu
# 或进入后
127.0.0.1:6379> auth atguigu
OK
②ACL(按用户分权限,推荐)
Redis 6+ 支持为不同用户分配命令权限和键权限:
# 创建只读用户
127.0.0.1:6379> acl setuser readonly on >readpass ~* +@read
OK
# 查看用户
127.0.0.1:6379> acl list
生产建议:默认
default用户设强密码,业务用最小权限用户(如只读用户给报表,读写用户只给指定 key 前缀)。
4、禁用危险命令
CONFIG、FLUSHALL、KEYS 等命令在生产很危险,可重命名/禁用:
rename-command CONFIG ""
rename-command FLUSHALL ""
rename-command KEYS ""
注意:禁用
KEYS会同时影响SCAN吗?不会,SCAN是独立命令。客户端要改密码也走 ACL,而不是CONFIG。
2、内存管理
1、设置最大内存
maxmemory 1gb
建议设置,否则内存写满会导致系统卡死/OOM。集群/主从需给复制缓冲区留空间。
2、淘汰策略(maxmemory-policy)
内存写满时按策略淘汰键。共 8 种取值,命名规律:allkeys-* = 在所有 key 中淘汰;volatile-* = 只在设置了过期时间的 key 中淘汰。后缀是淘汰算法:lru(最久未使用)/ lfu(访问频率最低)/ random(随机)/ ttl(剩余存活时间最短)。
| 策略 | 含义 | 适用 |
|---|---|---|
noeviction | 不淘汰;内存写满时写操作直接报错(读、删仍可用),默认值 | 数据不能丢 |
allkeys-lru | 在所有 key 中淘汰最近最少使用的 | 缓存首选 |
allkeys-lfu | 在所有 key 中淘汰访问频率最低的 | 热点波动大的缓存 |
allkeys-random | 在所有 key 中随机淘汰 | 访问均匀、无明显热点 |
volatile-lru | 只在带过期时间的 key 中淘汰最久未用的 | 部分数据可淘汰 |
volatile-lfu | 只在带过期时间的 key 中淘汰访问频率最低的 | 带 TTL 的热点缓存 |
volatile-random | 只在带过期时间的 key 中随机淘汰 | 带 TTL、无热点 |
volatile-ttl | 只淘汰剩余存活时间最短(最快过期)的 key | 优先清理即将过期的 |
maxmemory-policy allkeys-lru
注意:
volatile-*系列如果当前没有任何设置了过期时间的 key,行为会退化成noeviction——内存写满时写操作直接报错。所以用这类策略时,要确保"允许被淘汰的数据"都设置了 TTL。
记忆:缓存业务用
allkeys-lru;业务数据(不能丢)用noeviction。
3、淘汰精度
# LRU/LFU 是近似算法,抽样数量默认 5,越大越准但越耗 CPU
maxmemory-samples 5
3、systemd 服务化(开机自启)
1、编译时开启 systemd 支持
源码编译安装时带上(若不支持,supervised systemd 会退化为前台):
cd /opt/redis-8.0.6
make distclean
make USE_SYSTEMD=yes MALLOC=jemalloc
make install
2、修改配置
daemonize no # 交给 systemd 管理,不再自己后台化
supervised systemd # 让 systemd 能感知 Redis 就绪
3、创建服务文件
# /etc/systemd/system/redis.service
[Unit]
Description=Redis Server 8
After=network.target
[Service]
Type=notify
User=redis
Group=redis
ExecStart=/usr/local/bin/redis-server /usr/local/redis/redis.conf
ExecStop=/usr/local/bin/redis-cli -a atguigu shutdown
Restart=always
LimitNOFILE=65535
PrivateTmp=true
[Install]
WantedBy=multi-user.target
4、创建用户并设置权限(安全)
groupadd -r redis
useradd -r -s /sbin/nologin -g redis redis
chown -R redis:redis /usr/local/redis
chmod 600 /usr/local/redis/redis.conf
5、启用服务
systemctl daemon-reload
systemctl enable --now redis
systemctl status redis
4、监控与运维
1、运行状态
redis-cli info # 综合信息
redis-cli info memory # 内存
redis-cli info replication # 主从
redis-cli info persistence # 持久化
2、实时命令监控
redis-cli monitor # 实时打印所有命令(排查用,慎用:有开销)
3、慢查询
slowlog-log-slower-than 10000 # 超过 10s 记入慢日志
slowlog-max-len 128
redis-cli slowlog get 10
5、生产配置参考(汇总)
# === 网络与安全 ===
bind 192.168.100.100
protected-mode yes
requirepass atguigu # 或使用 ACL 最小权限用户
rename-command CONFIG ""
# === 内存 ===
maxmemory 1gb
maxmemory-policy allkeys-lru
# === 持久化 ===
appendonly yes
appendfsync everysec
save 3600 1 300 100 60 10000
# === systemd ===
daemonize no
supervised systemd
# === 其它 ===
databases 16
tcp-keepalive 300
slowlog-log-slower-than 10000
6、生产架构总结
一条完整的生产链路:应用(SpringBoot4) → Redis(集群/主从+哨兵,设密码+bind+内存策略+持久化) → 数据库,配合监控与慢查询。
7、课堂练习
- 给 Redis 设置
requirepass,重启后用redis-cli -a连接,确认未认证时操作报NOAUTH。 - 创建 ACL 只读用户并验证只能读、不能写。
- 设置
maxmemory 100mb+allkeys-lru,写入大量数据观察淘汰。 - 编写
redis.service并systemctl enable --now redis,确认开机自启。 - 用
redis-cli info memory和slowlog get观察运行状态。
8、本节验证
- 会配置保护模式、bind、requirepass、ACL、禁用危险命令 ✅
- 会设置 maxmemory 与淘汰策略(LRU/LFU 及适用场景)✅
- 会用 systemd 服务化 Redis 并做安全权限设置 ✅
- 会用 INFO/MONITOR 监控、慢查询定位,参考生产配置汇总 ✅