一、Redis 是什么、用来做什么
Redis 是开源的内存键值数据库,数据存在内存里,读写速度极快(十万级 QPS),还能通过 RDB/AOF 持久化到磁盘。它最常用于:缓存(把高频读的数据放内存,缓解数据库压力)、会话共享(多实例登录态)、排行榜/计数器(ZSET、INCR)、消息队列(Pub/Sub、List)等。相比大量 SQL 查询打满数据库,用 Redis 缓存热数据是提升站点并发最直接的招数之一。下面先把它部署起来,再讲缓存、持久化与常见坑。
二、安装与基础配置
# Debian/Ubuntu sudo apt update && sudo apt install -y redis-server # RHEL/Rocky/AlmaLinux sudo dnf install -y redis # 确认安装与版本 redis-server --version
主要配置在 /etc/redis/redis.conf(RHEL 系 /etc/redis.conf)。上线前必做的安全项:
# 绑定本机,避免暴露公网(默认 127.0.0.1 即可,别改成 0.0.0.0) bind 127.0.0.1 # 关闭受保护的模式(仅当你知道要公网访问才关闭,并务必设密码) protected-mode yes # 设置访问密码(强烈建议) requirepass 你的强密码
sudo systemctl enable --now redis # 或 redis-server.service redis-cli ping # 返回 PONG 即正常
Redis 默认没密码且只绑本机,若在 /etc 里被改成公网、又没设密码,极易被扫描器入侵植入挖矿脚本。公网访问务必设 requirepass。
三、命令行快速上手
# 带密码连接 redis-cli -a 你的密码 # 加/取/删/过期 SET user:1001 "u0020name" GET user:1001 EXPIRE user:1001 600 # 600 秒后过期 TTL user:1001 # 查看剩余存活秒(-1 永不过期) DEL user:1001 # 常用类型(会有用途) SET counter 0 INCR counter # 自增/计数器 LPUSH queue "job1" # List 作队列 RPOP queue HSET user:1 name "jack" # Hash 存对象 HGETALL user:1
这些基础命令在排查错配、验证程序逻辑时很好用。把 `INCR` 这类命令结合 EXPIRE 还能做很简单的接口限流,当然生产更常用到 Redis 的原子自增特性。
四、PHP / Node 接入 Redis 缓存
以 PHP + Redis 做"先查缓存、无则查库并回填"的经典模式为例:
<?php
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->auth('你的密码'); // requirepass 后需认证
$key = 'hot_post:' . $postId;
// 1. 先查缓存
if ($data = $redis->get($key)) {
echo "HIT: $data";
} else {
// 2. 缓存未命中,查数据库并写入,设置过期
$data = query_db($postId); // 你的真正查询
$redis->setex($key, 3600, $data); // 缓存 1 小时
echo "MISS: $data";
}
配套两个必修概念:缓存穿透(查不存在的 key,每次都打库)可对空结果也缓存短时间;缓存雪崩(大量 key 同时过期被打库)可给过期时间加随机抖动。这些是生产级缓存必须处理的问题,比"会不会 RE下 Q"更重要。
五、持久化:RDB 与 AOF 的选择
Redis 是内存库,断电会丢数据,靠持久化来找回:
- RDB(快照):按策略把数据二进制倾倒落盘,重启加载快,但可能丢最近一次快照后的数据。
- AOF(追加日志):记录每次写操作,恢复时可做到秒级丢数,文件较大。
# redis.conf 常见组合:两者都开(AOF 为准)或按需 save 900 1 # 900 秒内至少 1 次写则生成 RDB save 300 10 appendonly yes # 开启 AOF appendfsync everysec # 每 1 秒刷盘,丢数据窗口小、性能折中
对缓存用途,Redis 丢了可以从数据库重建,可适当放宽持久化;若 Redis 存了不可再生的会话/计数,务必开启 AOF 并定期 `BGSAVE` 手动快照。AOF 文件会随写入增长,可用 `BGREWRITEAOF` 压缩合并。
六、监控与常见问题排错
redis-cli -a 密码 info # 能看内存、命中率、key 数量、持久化状态 redis-cli -a 密码 --stat # 实时打印命令数与内存 redis-cli -a 密码 monitor # 实时查看执行命令(调优排查很直观,注意线上谨慎)
高频问题与排查:
- 连接拒绝(Connection refused):确认服务在跑(systemctl status redis)、bind 是否本机、端口 6379。
redis-cli -a 密码 ping直测。 - 认证失败 NOAUTH:连上没有密码的客户端需 `-a`,或配置少了 requirepass。
- OOM/maxmemory 告警:配置
maxmemory 512mb,超限按 `maxmemory-policy`(如 allkeys-lru)淘汰,避免拖垮整机。 - 被公网攻击:立即绑 127.0.0.1 + 设密码 + 用 firewalld/iptables 限制 6379 来源(结合防火墙文章)。
写在最后
Redis 给你的站点带来的提升是"一道内存高速缓存"。落地顺序:装上并设好密码与绑定 → 用命令行验证读写 → 在代码里实现"查缓存→未中查库→回填"→ 按数据重要性配 RDB/AOF → 处理缓存穿透/雪崩 → 定期用 info 看命中与内存。它是 LNMP 之后最常用也最值得掌握的中间件之一,配合之前的 MySQL 优化和缓存文章,你的站点并发能力会上一个明显的台阶。



