Redis 配置文件:redis.conf
redis.conf
文件是 Redis 服务器的中枢神经系统。它决定了 Redis 的行为方式,从内存管理和持久性到安全性和联网。了解并正确配置文件对于优化 Redis 性能、确保数据安全以及根据您的特定应用程序需求定制 Redis 至关重要。如果没有正确配置的 redis.conf
,您的 Redis 实例可能无法以最佳方式运行,可能容易受到安全威胁,甚至可能无法正确保存数据。
了解 redis.conf 文件
redis.conf
文件是一个纯文本文件,其中包含 Redis 在启动时读取的配置指令。这些指令控制 Redis 行为的各个方面。该文件通常位于 Linux 系统上的 /etc/redis/redis.conf
中,但其位置可能会因 Redis 的安装方式而异。启动 Redis 时,您可以使用 --conf
选项指定不同的配置文件: redis-server /path/to/your/redis.conf
。
redis.conf
文件中的每一行都表示一个配置指令。指令由一个关键字和一个或多个参数组成。注释由行首的 #
符号表示。Redis 忽略注释和空行。
配置指令的结构
典型的 configuration 指令如下所示:
keyword argument1 argument2 ...
例如:
port 6379
此指令设置 Redis 侦听的端口 6379。
redis.conf 中的公共部分
redis.conf
文件在逻辑上组织为多个部分,尽管这些部分在文件本身中没有明确使用标头标记。以下是常见部分及其包含的指令类型的细分:
- 常规配置: 本部分包括基本设置,例如端口号、绑定地址以及 Redis 是否应作为守护程序运行。
- 安全: 本节介绍身份验证设置,例如需要密码才能访问 Redis。
- 坚持: 本节介绍 Redis 如何将数据持久化到磁盘,包括 RDB 快照和 AOF 配置。
- 复制: 本部分配置 Redis 复制,允许您创建主从设置以实现数据冗余和读取扩展。(在后面的模块中介绍)
- 限制: 本部分对内存使用、客户端连接和其他资源设置限制。
- 仅附加模式: 本节配置 AOF 持久化机制。
- Lua 脚本: 本节允许您在 Redis 中配置 Lua 脚本。(在后面的模块中介绍)
- 高级配置: 本部分包括不太常用的设置,这些设置可以微调 Redis 的行为。
关键配置指令
让我们来探索一下 redis.conf
中一些最重要的配置指令:
网络配置
bind
:指定 Redis 应侦听的 IP 地址。默认情况下,它设置为127.0.0.1
,这意味着 Redis 仅接受来自本地计算机的连接。要允许来自其他计算机的连接,您可以绑定到特定的 IP 地址或0.0.0.0
以侦听所有接口。 安全说明: 在没有强密码的情况下绑定到0.0.0.0
可能会将您的 Redis 实例暴露在 Internet 上。bind 127.0.0.1 192.168.1.100 # Listen on localhost and 192.168.1.100
port
:指定 Redis 侦听的端口号。默认值为6379
。port 6379
tcp-backlog
:设置作系统可以为 Redis 排队的待处理 TCP 连接数。较高的值可用于处理大量并发连接。tcp-backlog 511
常规配置
daemonize
:指定 Redis 是否应作为守护进程(后台进程)运行。设置为yes
将在后台运行。daemonize yes
pidfile
:PID 文件的路径,其中包含 Redis 服务器的进程 ID。pidfile /var/run/redis/redis-server.pid
loglevel
:指定 Redis 日志消息的详细程度。可能的值为debug
、verbose
、notice
和warning
。通常
建议将 notice 用于生产环境。loglevel notice
logfile
:指定 Redis 将在其中写入其日志消息的日志文件的路径。logfile /var/log/redis/redis-server.log
databases
:指定 Redis 将创建的数据库数量。默认值为 16,编号范围为 0 到 15。您可以使用redis-cli
中的SELECT
命令选择数据库。databases 16
安全配置
requirepass
:设置客户端必须提供的密码才能使用 Redis 进行身份验证。 重要: 始终在生产环境中设置强密码,以防止未经授权的访问。requirepass your_strong_password
然后,客户端必须在
redis-cli
中使用AUTH
命令进行身份验证:AUTH your_strong_password
rename-command
:此指令允许您重命名具有潜在危险的命令,如FLUSHALL、``FLUSHDB、``KEYS、``SHUTDOWN
等。重命名命令会使攻击者更难利用漏洞。rename-command FLUSHALL "" # Disables the FLUSHALL command rename-command SHUTDOWN my_secret_shutdown
限制配置
maxmemory
:指定 Redis 可以使用的最大内存量。当 Redis 达到此限制时,它将根据maxmemory-policy
开始逐出 key。设置此项对于防止 Redis 占用服务器上的所有可用内存至关重要。maxmemory 2gb
maxmemory-policy
:指定当 Redis 达到maxmemory
限制时要使用的驱逐策略。常见策略包括:volatile-lru
:使用 LRU (Least Recently Used) 算法驱逐具有过期集的密钥。allkeys-lru
:使用 LRU 算法驱逐任何密钥。volatile-random
:随机驱逐设置了 expire 的密钥。allkeys-random
:随机驱逐任何 key。volatile-ttl
:根据最短剩余生存时间 (TTL) 驱逐设置了 expire 的密钥。noeviction
:不驱逐键。达到内存限制时返回错误。
maxmemory-policy volatile-lru
maxclients
:指定 Redis 可以接受的最大客户端连接数。maxclients 10000
持久化配置
有关 RDB 和 AOF 持久性的部分中详细介绍了这些设置。但是,以下是基本指令:
save
:配置 RDB 快照。指定 Redis 应将数据库保存到磁盘的频率。多个save
指令可用于定义不同的 save 间隔。save 900 1 # Save after 900 seconds (15 minutes) if at least 1 key has changed save 300 10 # Save after 300 seconds (5 minutes) if at least 10 keys have changed save 60 10000 # Save after 60 seconds if at least 10000 keys have changed
appendonly
:启用或禁用 AOF 持久化。设置为yes
以启用 AOF。appendonly no
appendfsync
:指定 Redis 应将 AOF 数据写入磁盘的频率。可能的值为always
、everysec
和no
。通常建议使用everysec
以平衡性能和数据安全。appendfsync everysec
应用配置更改
修改 redis.conf
文件后,您需要重启 Redis 服务器才能使更改生效。您可以使用以下命令执行此作:
redis-cli shutdown
redis-server /path/to/your/redis.conf
或者,您可以使用 CONFIG REWRITE
命令使用当前配置动态更新 redis.conf
文件。但是,此命令仅适用于某些配置指令,可能并不适合所有更改。
redis-cli config rewrite
实例
让我们看看如何使用 redis.conf
文件配置 Redis 的一些实际示例。
示例 1:保护 Redis 实例
要保护 Redis 实例,您应该:
- 使用
requirepass
指令设置强密码。 - 将 Redis 绑定到特定的 IP 地址或使用防火墙限制访问。
- 重命名具有潜在危险的命令。
下面是一个示例配置:
bind 127.0.0.1
requirepass my_strong_password
rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command KEYS ""
rename-command SHUTDOWN ""
示例 2:配置内存管理
要配置内存管理,您应该:
- 设置
maxmemory
限制以防止 Redis 占用所有可用内存。 - 根据应用程序的需求选择合适的
maxmemory-policy
。
下面是一个示例配置:
maxmemory 4gb
maxmemory-policy volatile-lru
示例 3:配置 Persistence
要配置持久性,您应该:
- 在 RDB 和 AOF 持久性之间进行选择,或同时使用两者。
- 配置
RDB
快照的 save 指令。 - 为
AOF
持久性配置appendonly 和 appendfsync
指令。
以下是使用 RDB 和 AOF 的示例配置:
save 900 1
save 300 10
save 60 10000
appendonly yes
appendfsync everysec