网站访问量上来后,响应变慢的第一个拦路虎往往是数据库。每次请求都直连 MySQL 查一遍,又慢又费资源。Redis 是当下最流行的内存数据库,把热点数据放在内存里,读写是磁盘的几十倍,是建站提速、缓存热数据的首选。这篇文章从安装、配置、密码、持久化到常用命令,手把手把 Redis 配到能投产使用。
一、Redis 能干什么
Redis 是 K-V(键值)内存数据库,常用场景:
- 页面/接口缓存:把数据库查询结果、整页 HTML 缓存起来,下次直接读内存
- Session 存储:多台服务器共享登录态
- 计数器/排行榜:当天访问数、点赞、热点排名
- 消息队列:简单的发布订阅、延迟队列
对个人站长最直接的价值就是:让高频数据库查询走内存,源网站秒开。
二、安装 Redis
Ubuntu / Debian:
apt update
apt install -y redis-server
CentOS / AlmaLinux:
yum install -y redis
安装后检查版本并设置开机自启:
redis-cli --version
systemctl enable redis # Ubuntu 的远古版本可能叫 redis-server
systemctl start redis
三、基础配置(重要)
Redis 主配置文件通常在 /etc/redis/redis.conf。先做三件事:绑定地址、设密码、关危险命令。
1. 设置绑定地址与端口:
# 默认只监听本机,外部无法直连(安全起见保持即可)
bind 127.0.0.1 -::1
port 6379
个人网站自己用,通常 Redis 和 PHP/Java 在同一台机器,保持只对本机即可,别暴露公网。
2. 设置访问密码(必做):
# 用一条尽量复杂的密码替换
requirepass My_Secure_Redis_Pass_2024
设置后,命令行连接要带 -a 或登录后 AUTH:
redis-cli -a My_Secure_Redis_Pass_2024
3. 禁用危险命令(防止被入侵后删库/执行):
rename-command FLUSHALL ""
rename-command FLUSHDB ""
改完重启生效:
systemctl restart redis
四、验证是否正常工作
# 交互测试(带密码)
redis-cli -a My_Secure_Redis_Pass_2024 ping
# 返回 PONG 即正常
ping 返回 PONG,说明 Redis 已经在运行。
五、常用命令速记
字符串(最常用):
SET key value
GET key
SET key value EX 3600 # 设置 1 小时过期
TTL key # 查看剩余过期时间
DEL key
列表 / 哈希 / 集合:
LPUSH list value1 value2 # 从左侧压入
LRANGE list 0 -1 # 查看全部
HSET h field value # 哈希
HGETALL h
SADD set val1 # 集合
SMEMBERS set
发布订阅:
PUBLISH channel msg
SUBSCRIBE channel
六、设置持久化(防止重启数据丢失)
Redis 默认开启 RDB 快照,但为了更稳妥,可配合 AOF。在配置文件里:
# RDB 快照(默认开启,多少秒写多少条就落盘一次)
save 900 1
save 300 10
save 60 10000
# AOF:每条写操作追加到文件,数据更保险
appendonly yes
appendfsync everysec
RDB 是定期快照,恢复快、文件小;AOF 记录每条命令,丢失更少。两者可同时开。改完重启生效。
七、内存与淘汰策略
Redis 存的是内存,不能无限涨。设一个最大内存,并指定超限后的策略:
maxmemory 256mb
maxmemory-policy allkeys-lru # 内存满了淘汰最久没人用的键
常见策略:
noeviction:不淘汰,内存满写不进去(默认)allkeys-lru:淘汰最久未用的键(个人站推荐)volatile-lru:只淘汰设置了过期时间的键
八、在网站里用起来
以 PHP 为例(装了 phpredis 扩展):
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->auth('My_Secure_Redis_Pass_2024');
$key = 'post_detail_' . $postId;
$html = $redis->get($key);
if ($html === false) {
// 从数据库查 + 渲染页面
$html = renderPost($postId);
$redis->setex($key, 3600, $html); // 缓存 1 小时
}
echo $html;
这样同一篇文章 1 小时内不查数据库,直接返回内存缓存,速度立竿见影。
九、常见问题
Q1:redis-cli -a xxx 连接被拒绝?
检查 Redis 是否启动(systemctl status redis)、绑定地址是否是公网导致不通,以及密码是否正确。多数情况是密码打错或服务没起来。
Q2:重启后数据没了?
确认 appendonly 是否开启,及 save 落盘条件是否触发。数据写入后若立刻断电关机,最近几秒的 AOF 或未到点的快照可能丢,属正常现象;重要数据可用 BGSAVE/SAVE 手动触发快照。
Q3:要不要改端口?
端口 6379 是默认的,若把 Redis 暴露到公网,务必改高端口 + 强密码 + 防火墙放行,否则极易被扫描爆破。个人站建议只监听本机。
Q4:内存一直涨怎么办?
结合 maxmemory + 淘汰策略,并检查是否有死循环写入或没设过期时间的缓存键。用 redis-cli info memory、SCAN 查看大键。
十、配套建议
Redis 优化往往要和 MySQL、PHP-FPM 一起做,才能整体提速。配合本站的 MySQL 调优、PHP 性能优化教程,把缓存、数据库、进程三者都调到位,低配机器也能承接可观的访问量。
总结
Redis 装起来不难,关键是配好密码、绑定地址、持久化、淘汰策略这四件事再投产。装上之后,把热点数据缓到内存,网站响应速度会有质的飞跃。配合数据库、PHP 优化一起用,一台小 VPS 也能跑出流畅的体验。
