Redis(Remote Dictionary Server)是一个高性能的键值内存数据库,支持字符串、哈希、列表、集合、有序集合等多种数据结构。它不仅可用作缓存,还常被用于消息队列(发布/订阅)、实时计数、排行榜等场景,几乎所有需要快速读写数据的互联网服务背后,都能看到它的身影。
本节以最常见的 Linux 发行版(Ubuntu/Debian 和 CentOS/Rocky Linux)为例,介绍 Redis 的安装、基础配置、持久化机制以及密码验证的设置方法。
1. 安装 Redis
大多数情况下,直接通过系统自带的包管理器安装最为快捷。如果需要最新版本或定制编译参数,可以从源码编译。
通过包管理器安装(推荐)
- Ubuntu/Debian:
sudo apt update
sudo apt install redis-server -y
- CentOS/Rocky Linux(需先启用 EPEL 仓库):
sudo dnf install epel-release -y
sudo dnf install redis -y
安装完成后,Redis 服务通常会自动启动,可以通过以下命令检查状态:
sudo systemctl status redis
如果未启动,手动启动并设置开机自启:
sudo systemctl enable --now redis
从源码编译安装
如果需要特定版本(例如带有新模块的版本),可以下载源码编译:
wget https://download.redis.io/releases/redis-7.2.4.tar.gz
tar xzf redis-7.2.4.tar.gz
cd redis-7.2.4
make
sudo make install
编译出的可执行文件(redis-server、redis-cli 等)默认安装到 /usr/local/bin。此后可以手动创建 systemd 服务文件来管理。
2. 基础配置
Redis 的主配置文件通常位于 /etc/redis/redis.conf(包管理器安装)或编译目录下的 redis.conf。以下是几个需要第一时间关注的配置项。
关键配置项(编辑 /etc/redis/redis.conf)
bind 127.0.0.1
指定 Redis 监听的网络接口。默认只允许本地访问,如果要从外部连接,可以添加本机 IP 或设为 0.0.0.0 监听所有接口,但必须配合密码和防火墙使用。
port 6379
监听端口,默认 6379。
daemonize yes
以守护进程方式运行,让 Redis 在后台启动。systemd 管理时通常设为 no,由 systemd 控制前台运行。
logfile /var/log/redis/redis.log
日志文件路径,避免日志直接输出到标准输出。
dir /var/lib/redis
持久化文件(RDB、AOF)的存储目录。
maxmemory 256mb
设置最大内存使用量,超过后会按照 maxmemory-policy 定义的策略淘汰键(如 allkeys-lru、volatile-lru 等)。生产环境务必配置此项,避免内存耗尽。
修改配置后需重启服务生效:
sudo systemctl restart redis
3. 持久化机制
Redis 的数据默认保存在内存中,但提供了两种方式将数据持久化到磁盘,以便重启后恢复。两者可以单独使用,也可以同时开启。
RDB(Redis Database)
- 定期将某个时间点的数据快照写入
.rdb文件。 - 触发方式:满足配置文件中的
save <秒数> <修改次数>条件时自动生成,比如默认有:
save 900 1 # 900 秒内至少 1 次修改
save 300 10 # 300 秒内至少 10 次修改
save 60 10000 # 60 秒内至少 10000 次修改
也可以手动执行 SAVE 或 BGSAVE 命令。
- 优点:文件紧凑,恢复速度快,适合备份。
- 缺点:如果 Redis 意外崩溃,最后一次快照之后的数据会丢失。
AOF(Append Only File)
- 记录每一条写入命令,追加到
.aof文件末尾,类似数据库的 WAL。 - 开启方式:在配置文件中设置
appendonly yes。 - 同步策略由
appendfsync控制: always:每条命令都同步,最安全但性能最低;everysec:每秒同步一次,兼顾性能和安全(默认推荐);no:由操作系统决定,可能丢失较多数据。- 优点:数据丢失窗口极小(最多一秒或一条命令),文件可读,方便故障修复。
- 缺点:AOF 文件通常比 RDB 大,恢复速度稍慢。Redis 会定期通过后台重写压缩 AOF 文件。
生产环境建议:同时开启 RDB 和 AOF,RDB 用于日常备份,AOF 保障数据安全。若对性能要求极高且可以接受少量数据丢失,可只开启 RDB;若数据绝不能丢失(如记账系统),优先使用 AOF。
4. 密码验证
默认安装的 Redis 没有密码保护,任何能够连接的人都可以执行所有命令,这在生产环境是极其危险的。设置密码是最基本的安全措施。
方法一:使用传统 requirepass
在 redis.conf 中找到 # requirepass foobared,去掉注释并修改为强密码:
requirepass your_strong_password_here
重启 Redis 后,客户端连接时需通过 AUTH 命令认证:
redis-cli -a your_strong_password_here
或在进入交互式界面后执行:
redis-cli
127.0.0.1:6379> AUTH your_strong_password_here
方法二:使用 ACL(Redis 6.0+ 推荐)
ACL 提供了更细粒度的用户和权限管理。除了设置默认用户密码,还可以创建不同权限的账号。
- 在
redis.conf中配置:
user default on >default_password_here ~* +@all
user readonly on >readonly_password_here ~* +@read
上面定义了默认用户 default(拥有全部命令权限)和一个只读用户 readonly(只能读取数据)。
- 客户端连接时指定用户:
redis-cli --user readonly -a readonly_password_here
如果 Redis 暴露在公网,除了密码,还需结合防火墙限制来源 IP、禁用危险命令(如 FLUSHALL、CONFIG)等。至少,一个强密码是必须的第一道防线。
快速验证
安装、配置并重启后,可以用 redis-cli 简单测试:
redis-cli ping
# 如果设置了密码,应该返回 (error) NOAUTH Authentication required.
redis-cli -a your_password ping
# 认证通过后返回 PONG
Redis 的安装和基础配置并不复杂,但它的灵活性和性能却极为可观。掌握上述要点,你就能快速搭建出一个安全、可持久化的 Redis 实例,应对大多数日常工作负载。