Redis的强大之处不仅在于其高性能的内存操作,更在于通过配置文件(默认名为redis.conf)可以灵活定制其运行行为------小到端口、密码配置,大到持久化策略、内存管理、高可用部署,都能在配置文件中实现精准控制。
很多新手使用Redis时,习惯直接用默认配置启动,遇到数据丢失、性能瓶颈、安全漏洞时才慌了神,本质上是对redis.conf的核心配置项不了解。今天这篇博客,就带大家从头到尾吃透Redis配置文件,结合实际使用场景,逐模块拆解每一个关键配置,无论是开发环境调试还是生产环境部署,都能直接参考使用。
说明:本文基于Redis 6.0+版本(目前企业主流版本),配置项与低版本基本兼容,少数新增配置会特别标注;所有配置项均对应redis.conf中的原始注释逻辑,同时补充实战建议,避免"只懂字面意思,不会实际配置"的问题。
一、配置文件基础认知(必看)
1.1 配置文件的作用与加载方式
Redis启动时,会默认加载指定路径下的redis.conf文件(若未指定,会使用内置默认配置,仅适合测试环境)。加载方式有两种:
-
启动时指定配置文件(推荐,生产环境必用):
redis-server /etc/redis/redis.conf(路径根据自己的实际安装目录调整); -
动态修改配置(无需重启Redis,适合临时调整):通过
redis-cli CONFIG SET 配置项 配置值修改,例如CONFIG SET requirepass 123456,但注意:动态修改的配置重启后会失效,需同步修改redis.conf文件才能永久生效,也可使用CONFIG REWRITE命令自动同步到配置文件中。
1.2 配置文件的语法规则
-
注释:以
#开头的行是注释,Redis会忽略;部分注释会包含配置项的说明,建议新手先通读一遍默认注释。 -
配置格式:
配置项 配置值,例如port 6379,中间用空格分隔;若配置值包含空格,需用双引号或单引号包裹,例如requirepass "my redis password"。 -
单位规范:配置文件中支持内存、时间单位,不区分大小写:
-
内存单位:1k(1000字节)、1kb(1024字节)、1m(1000000字节)、1mb(1048576字节)、1g(1000000000字节)、1gb(1073741824字节),例如
maxmemory 10gb; -
时间单位:1s(秒)、1ms(毫秒)、1m(分钟)、1h(小时)、1d(天),例如
timeout 300s。
-
-
引入其他配置:可通过
include /path/to/other.conf引入其他配置文件,适合将不同模块的配置拆分管理(例如将持久化配置、集群配置单独拆分)。
1.3 核心配置模块划分
redis.conf的配置项虽多,但逻辑清晰,主要分为以下8大模块,后续我们逐模块详解:
-
网络配置(Network):控制Redis的网络连接,如端口、绑定IP、连接限制等;
-
通用配置(General):控制Redis的基础运行模式,如是否后台运行、日志、进程文件等;
-
持久化配置(Persistence):控制RDB和AOF两种持久化方式,核心是防止数据丢失;
-
内存管理(Memory Management):控制Redis的内存使用,避免内存溢出;
-
高可用配置(Replication/Cluster):主从复制、哨兵、集群相关配置;
-
安全配置(Security):密码认证、命令限制等,防止未授权访问;
-
客户端配置(Clients):控制客户端连接相关参数;
-
高级配置(Advanced):性能调优、慢查询、Lua脚本等相关配置。
二、网络配置(Network)------ 控制Redis的"通信方式"
网络配置是Redis对外提供服务的基础,核心是控制"谁能连接Redis""通过什么端口连接",生产环境需重点配置,避免暴露外网导致安全风险。
2.1 bind:绑定监听的IP地址
默认配置:bind 127.0.0.1
含义:指定Redis监听的网卡IP,只有绑定的IP才能访问Redis。
详细说明:
-
默认值
127.0.0.1:仅允许本地(本机)访问,外部机器无法连接,适合开发、测试环境; -
多IP绑定:可绑定多个IP,用空格分隔,例如
bind 127.0.0.1 192.168.1.100,表示本地和内网IP均可访问; -
允许所有IP访问:设置为
bind 0.0.0.0,表示监听所有网卡接口,任何IP都能连接(生产环境需配合密码和防火墙使用,否则有安全风险); -
注意:Redis 3.2+版本后,若未设置bind且未设置密码,会开启保护模式(protected-mode),仅允许本地访问。
实战建议:生产环境绑定内网IP(如192.168.xxx.xxx),避免绑定0.0.0.0,同时通过防火墙限制访问端口。
2.2 protected-mode:保护模式
默认配置:protected-mode yes
含义:Redis的安全保护机制,防止未授权访问。
详细说明:
-
yes(默认):如果未设置bind(或绑定0.0.0.0)且未设置密码(requirepass),则仅允许本地(127.0.0.1)访问,拒绝外部连接;
-
no:关闭保护模式,此时即使未设置密码、绑定0.0.0.0,外部也能直接连接(不推荐生产环境使用,除非有严格的防火墙限制)。
实战建议:保持默认yes,通过设置bind和密码来控制访问,而非关闭保护模式。
2.3 port:监听端口
默认配置:port 6379
含义:Redis监听的TCP端口,客户端通过该端口连接Redis。
详细说明:
-
默认端口6379,是Redis的官方默认端口,建议生产环境不要使用默认端口(可改为10000以上的端口),降低被扫描攻击的风险;
-
若设置为
port 0,Redis将不监听TCP端口,仅支持本地unix socket连接(极少用)。
2.4 tcp-backlog:TCP连接队列长度
默认配置:tcp-backlog 511
含义:TCP三次握手完成后,服务器端接收连接的队列长度,用于处理高并发连接场景。
详细说明:队列长度由内核参数和该配置共同决定,高并发环境下(如每秒万级连接),需调大此值(如2048),避免因队列满导致客户端连接失败;计算规则可参考"maxclients值 + 32"。
实战建议:高并发场景下调整为tcp-backlog 2048,同时优化内核参数net.core.somaxconn(建议设为2048以上)。
2.5 timeout:客户端空闲超时时间
默认配置:timeout 0
含义:客户端空闲N秒后,Redis自动断开该连接,单位为秒。
详细说明:
-
0(默认):永不超时,客户端可以一直保持连接(推荐生产环境使用,避免因超时导致连接频繁断开);
-
非0值:例如
timeout 300,表示客户端空闲5分钟后自动断开,适合对连接数有严格限制的场景。
2.6 tcp-keepalive:TCP会话保持时间
默认配置:tcp-keepalive 300
含义:TCP的保活机制,单位为秒,用于检测死连接(客户端异常断开后,服务器端及时释放连接)。
详细说明:设置为300,表示每300秒向客户端发送一次保活探测包,若客户端无响应,则断开连接;建议保持默认值,无需修改,若网络不稳定,可适当减小该值(如120)。
三、通用配置(General)------ 控制Redis的"基础运行"
通用配置主要控制Redis的运行模式、日志、进程管理等基础行为,决定Redis如何在服务器上运行。
3.1 daemonize:守护进程模式
默认配置:daemonize no
含义:控制Redis是否以后台守护进程方式运行(核心配置,生产环境必改)。
详细说明:
-
no(默认):前台运行,Redis启动后,终端不能关闭,关闭终端则Redis进程终止(适合开发、测试环境);
-
yes:后台运行,Redis启动后会脱离终端,以守护进程形式运行,即使关闭终端,进程依然存在(生产环境必须设置为yes)。
注意:设置为yes后,Redis会将进程ID写入pidfile指定的文件中,便于管理进程。
3.2 supervised:进程管理方式
默认配置:supervised no
含义:指定Redis的进程管理方式,用于配合系统的进程管理工具(如systemd、upstart)。
详细说明:
-
no(默认):不使用任何进程管理工具,自行管理Redis进程;
-
systemd:CentOS 7+、Ubuntu 16.04+ 等使用systemd管理进程的系统,设置为
supervised systemd,便于通过systemctl start/stop/restart redis管理Redis; -
upstart:Ubuntu 14.04及以下使用upstart的系统,设置为
supervised upstart。
实战建议:CentOS 7+ 系统设置为supervised systemd,方便进程管理和开机自启。
3.3 pidfile:PID文件路径
默认配置:pidfile /var/run/redis_6379.pid
含义:当Redis以守护进程(daemonize yes)运行时,会将进程ID(PID)写入该文件,用于标识Redis进程。
详细说明:
-
默认路径为
/var/run/redis_6379.pid,其中6379是默认端口,若修改了port,建议同步修改pidfile的文件名(如port改为6380,pidfile改为/var/run/redis_6380.pid); -
若服务器重启后,该文件未被删除,可能导致Redis无法重新启动(提示"PID文件已存在"),需手动删除该文件后再启动。
3.4 loglevel:日志级别
默认配置:loglevel notice
含义:控制Redis日志的输出级别,级别从低到高分为4种,级别越高,输出的日志越少(仅记录重要信息)。
详细说明(4种级别):
-
debug:调试级别,输出所有日志(包括详细的调试信息),仅适合开发、测试环境,生产环境禁用(日志量过大,占用磁盘和性能);
-
verbose:详细级别,输出较多日志,包括客户端连接、命令执行等信息,适合调试问题;
-
notice(默认):通知级别,输出关键信息(如启动、关闭、持久化触发等),不输出冗余信息,适合生产环境;
-
warning:警告级别,仅输出警告和错误信息(如配置错误、内存不足等),适合对日志量有严格限制的场景。
实战建议:生产环境保持默认loglevel notice,既保证能监控关键事件,又不会产生过多日志。
3.5 logfile:日志文件路径
默认配置:logfile ""(空值)
含义:指定Redis日志的输出路径,空值表示输出到标准输出(终端)。
详细说明:
-
空值(默认):日志输出到终端,若Redis以前台运行,日志会显示在终端;若以后台运行,日志会被丢弃(不推荐生产环境);
-
指定路径:例如
logfile /var/log/redis/redis.log,日志会写入该文件,便于后续排查问题(生产环境必须设置); -
注意:需确保Redis进程有该路径的写入权限,否则日志无法正常生成(可通过
chown -R redis:redis /var/log/redis授权)。
3.6 databases:数据库数量
默认配置:databases 16
含义:Redis默认支持的数据库数量,每个数据库是独立的(数据不互通),默认使用第0个数据库(索引0-15)。
详细说明:
-
可通过
SELECT 数据库索引命令切换数据库,例如SELECT 1切换到第1个数据库; -
生产环境可根据业务需求调整数量(如拆分不同业务的数据到不同数据库),但不建议设置过多(过多会增加管理成本);
-
注意:持久化文件(RDB/AOF)会保存所有数据库的数据,删除某一个数据库的数据,不会影响其他数据库。
3.7 always-show-logo:启动时显示Logo
默认配置:always-show-logo yes
含义:Redis启动时,是否在终端或日志中显示ASCII格式的Redis Logo。
详细说明:设置为no可关闭Logo显示,不影响Redis的正常运行,仅用于美观和标识。
四、持久化配置(Persistence)------ 防止数据丢失的核心
Redis是内存数据库,默认情况下,数据仅存储在内存中,一旦Redis重启、服务器断电,数据会全部丢失。持久化配置的核心是将内存中的数据写入磁盘,重启时恢复数据,Redis提供两种持久化方式:RDB(快照式)和AOF(日志式),可单独使用,也可同时使用(生产环境推荐同时开启)。
4.1 RDB持久化配置(默认开启)
RDB(Redis Database Backup)是快照式持久化,核心是"在指定时间间隔内,将内存中的全量数据拍摄快照,写入磁盘的.rdb文件",重启时读取该文件恢复数据。
4.1.1 save:RDB触发条件(核心配置)
默认配置:
save 900 1 # 900秒(15分钟)内,有1个键发生修改,触发RDB快照 save 300 10 # 300秒(5分钟)内,有10个键发生修改,触发RDB快照 save 60 10000 # 60秒(1分钟)内,有10000个键发生修改,触发RDB快照
含义:定义RDB快照的触发时机,格式为save 秒数 修改次数,满足任意一个条件就会触发快照。
详细说明:
-
多个save配置并行生效,只要满足其中一个,就会执行BGSAVE(后台快照)操作;
-
禁用RDB:将所有save配置注释,或添加
save ""(空字符串),表示不触发自动RDB快照; -
手动触发:通过
SAVE(阻塞主线程,不推荐)或BGSAVE(后台执行,不阻塞主线程,推荐)命令手动触发RDB快照。
实战建议:生产环境可根据数据重要性调整触发条件,例如数据更新频繁,可将60秒的触发次数调大(如20000),避免频繁触发快照影响性能。
4.1.2 stop-writes-on-bgsave-error:快照出错时是否停止写入
默认配置:stop-writes-on-bgsave-error yes
含义:当BGSAVE操作失败(如磁盘满、权限不足)时,是否禁止Redis执行写操作。
详细说明:
-
yes(默认):快照失败时,禁止写入,目的是提醒运维人员及时处理(如清理磁盘),避免数据丢失;
-
no:快照失败时,继续允许写入,适合对数据一致性要求不高、不希望因磁盘小故障导致服务不可用的场景(生产环境需谨慎使用)。
4.1.3 rdbcompression:RDB文件是否压缩
默认配置:rdbcompression yes
含义:生成RDB文件时,是否使用LZF算法对数据进行压缩,减少文件体积。
详细说明:
-
yes(默认):开启压缩,可大幅减小RDB文件体积(节省磁盘空间),但会消耗少量CPU资源(压缩过程);
-
no:关闭压缩,RDB文件体积大,但生成速度快,适合CPU资源紧张、磁盘空间充足的场景。
实战建议:保持默认yes,压缩带来的CPU消耗可忽略,且能节省大量磁盘空间。
4.1.4 rdbchecksum:RDB文件校验
默认配置:rdbchecksum yes
含义:读取和写入RDB文件时,是否对文件进行CRC64校验,确保文件完整性(防止文件损坏导致恢复失败)。
详细说明:
-
yes(默认):开启校验,可检测RDB文件是否损坏,恢复时若校验失败,Redis会拒绝加载该文件;
-
no:关闭校验,读取RDB文件速度更快,但无法检测文件损坏,可能导致恢复的数据不完整。
实战建议:保持默认yes,确保数据恢复的完整性,校验带来的性能损耗可忽略。
4.1.5 dbfilename:RDB文件名
默认配置:dbfilename dump.rdb
含义:指定RDB快照文件的名称,默认名为dump.rdb。
实战建议:可根据端口或业务修改文件名,例如dbfilename dump_6379.rdb,便于区分多个Redis实例的RDB文件。
4.1.6 dir:数据文件存储目录
默认配置:dir ./
含义:指定RDB、AOF等数据文件的存储目录,默认是Redis启动目录(./)。
详细说明:
-
生产环境必须修改为绝对路径,例如
dir /var/lib/redis,避免Redis启动目录变化导致无法找到数据文件; -
确保该目录有Redis进程的读写权限,否则无法生成或读取数据文件。
4.2 AOF持久化配置(默认关闭)
AOF(Append Only File)是日志式持久化,核心是"将每一条写命令(如set、del)追加到.aof文件中,重启时重新执行文件中的所有命令,恢复数据",数据安全性比RDB更高(几乎不丢数据)。
4.2.1 appendonly:是否开启AOF
默认配置:appendonly no
含义:控制是否开启AOF持久化,默认关闭,开启后Redis会将所有写命令追加到AOF文件。
实战建议:生产环境必须设置为appendonly yes,配合RDB使用,确保数据安全。
4.2.2 appendfilename:AOF文件名
默认配置:appendfilename "appendonly.aof"
含义:指定AOF文件的名称,默认名为appendonly.aof,存储在dir指定的目录下。
实战建议:可同步修改为appendfilename "appendonly_6379.aof",与RDB文件区分。
4.2.3 appendfsync:AOF刷盘策略(核心配置)
默认配置:appendfsync everysec
含义:控制AOF文件的刷盘时机(将内存中的命令写入磁盘),决定AOF的性能和数据安全性,有3种策略可选。
详细说明(3种策略):
-
always:每次执行写命令后,立即将命令刷盘(写入磁盘),最安全,数据几乎不丢失,但性能最差(频繁刷盘会消耗磁盘I/O),适合对数据安全性要求极高的场景(如金融数据);
-
everysec(默认):每秒刷盘一次,平衡安全性和性能,最多丢失1秒内的数据,适合绝大多数生产环境(推荐);
-
no:不主动刷盘,由操作系统决定刷盘时机(操作系统会定期将内存数据刷入磁盘),性能最好,但数据安全性最差,可能丢失大量数据(不推荐生产环境使用)。
4.2.4 no-appendfsync-on-rewrite:重写期间是否暂停刷盘
默认配置:no-appendfsync-on-rewrite no
含义:当AOF文件重写(AOF Rewrite)时,是否暂停appendfsync刷盘操作,避免刷盘和重写同时进行,消耗过多磁盘I/O。
详细说明:
-
no(默认):重写期间不暂停刷盘,确保数据不丢失,但会增加磁盘I/O压力;
-
yes:重写期间暂停刷盘,减少I/O压力,提升重写速度,但可能丢失重写期间的少量数据(最多1秒,与appendfsync everysec配合)。
实战建议:保持默认no,优先保证数据安全,若磁盘I/O压力过大,可设置为yes(需接受少量数据丢失风险)。
4.2.5 auto-aof-rewrite-percentage:AOF重写触发百分比
默认配置:auto-aof-rewrite-percentage 100
含义:AOF文件自动重写的触发条件之一,当当前AOF文件大小比上次重写后的大小增长了指定百分比时,触发重写。
详细说明:例如,上次重写后的AOF文件大小为100MB,当前大小为200MB(增长100%),则触发重写;重写的目的是压缩AOF文件(去除冗余命令,如多次set同一个键,只保留最后一次set命令),减少文件体积。
4.2.6 auto-aof-rewrite-min-size:AOF重写最小文件大小
默认配置:auto-aof-rewrite-min-size 64mb
含义:AOF文件自动重写的触发条件之二,只有当AOF文件大小达到该值时,才会触发重写(避免小文件频繁重写)。
详细说明:例如,AOF文件大小为50MB,即使增长了100%(达到100MB),但未达到64MB,也不会触发重写;只有当文件大小≥64MB且满足百分比条件时,才会触发重写。
实战建议:根据业务调整,例如高写入场景可设置为128mb,避免频繁重写。
4.2.7 aof-load-truncated:AOF文件损坏时是否加载
默认配置:aof-load-truncated yes
含义:Redis重启时,若检测到AOF文件末尾损坏(如断电导致),是否继续加载该文件(忽略损坏部分)。
详细说明:
-
yes(默认):忽略损坏部分,加载AOF文件中正常的命令,尽可能恢复数据,加载后会在日志中提示文件损坏;
-
no:拒绝加载损坏的AOF文件,Redis无法启动,需手动修复AOF文件(如使用
redis-check-aof工具)后再启动。
4.3 持久化方式选择建议(生产环境)
-
追求性能、可接受少量数据丢失:仅开启RDB(不推荐,风险较高);
-
追求数据安全、几乎不丢数据:开启AOF(appendfsync everysec)+ RDB;
-
恢复优先级:Redis重启时,若同时开启AOF和RDB,会优先加载AOF文件(数据更完整),再加载RDB文件(可选)。
五、内存管理(Memory Management)------ 避免内存溢出
Redis是内存数据库,若内存使用无限制,会导致服务器内存耗尽,进而触发OOM(内存溢出),导致Redis进程被杀死。内存管理配置的核心是"限制Redis使用的最大内存,并指定内存溢出时的淘汰策略"。
5.1 maxmemory:Redis最大可用内存
默认配置:maxmemory 0
含义:指定Redis可使用的最大内存,单位为字节(可加单位,如10gb),0表示不限制(默认,生产环境必须修改)。
详细说明:
-
生产环境建议设置为服务器物理内存的70%-80%,例如服务器物理内存为16GB,可设置为
maxmemory 12gb,预留部分内存给操作系统和其他进程; -
若不设置maxmemory,Redis会持续占用内存,直到服务器内存耗尽,触发OOM。
5.2 maxmemory-policy:内存淘汰策略(核心配置)
默认配置:maxmemory-policy noeviction
含义:当Redis使用的内存达到maxmemory时,触发内存淘汰策略,决定如何处理新的写命令(避免内存溢出)。
详细说明(6种淘汰策略,Redis 6.0+ 支持):
-
noeviction(默认):禁止淘汰任何键,当内存达到maxmemory后,拒绝所有新的写命令(返回错误),读命令正常执行,适合对数据一致性要求极高、不允许丢失任何数据的场景(如金融数据);
-
volatile-lru:仅淘汰设置了过期时间(TTL)的键,使用LRU(最近最少使用)算法,优先淘汰最近最少使用的键,适合有过期键的场景(如缓存);
-
allkeys-lru:淘汰所有键(无论是否设置过期时间),使用LRU算法,优先淘汰最近最少使用的键,适合Redis作为缓存使用的场景(推荐,最常用);
-
volatile-lfu:仅淘汰设置了过期时间的键,使用LFU(最不经常使用)算法,优先淘汰使用频率最低的键,适合对键的使用频率敏感的场景;
-
allkeys-lfu:淘汰所有键,使用LFU算法,优先淘汰使用频率最低的键,适合缓存场景,比LRU更精准;
-
volatile-random:仅淘汰设置了过期时间的键,随机淘汰,适合对淘汰键无明确要求的场景;
-
allkeys-random:淘汰所有键,随机淘汰,不推荐使用(淘汰效率低);
-
volatile-ttl:仅淘汰设置了过期时间的键,优先淘汰剩余过期时间最短的键(TTL最小),适合需要优先保留长期有效键的场景。
实战建议:
-
Redis作为缓存使用(最常见场景):设置为
maxmemory-policy allkeys-lru或allkeys-lfu; -
Redis存储有过期键的业务数据:设置为
maxmemory-policy volatile-lru; -
不允许丢失任何数据:设置为
maxmemory-policy noeviction,同时需及时扩容内存。
5.3 maxmemory-samples:LRU/LFU算法采样数量
默认配置:maxmemory-samples 5
含义:Redis执行LRU/LFU淘汰时,会从所有符合条件的键中随机采样N个,然后淘汰其中"最近最少使用"或"最不经常使用"的键,采样数量越多,淘汰越精准,但消耗的CPU资源越多。
实战建议:保持默认5,若对淘汰精准度要求高,可调整为10(CPU消耗可忽略)。
六、高可用配置(Replication/Cluster)------ 保证服务稳定
高可用是生产环境的核心需求,Redis通过主从复制、哨兵模式、集群模式实现高可用,以下是核心配置(详细的高可用部署流程可参考后续单独文章)。
6.1 主从复制配置(基础高可用)
主从复制的核心是"一个主节点(master),多个从节点(replica),主节点负责写操作,从节点负责读操作,主节点的数据同步到从节点",实现读写分离和数据冗余。
6.1.1 replicaof:指定主节点地址(从节点配置)
默认配置:# replicaof <masterip> <masterport>(注释状态)
含义:在从节点的配置文件中,指定主节点的IP和端口,让从节点主动连接主节点,同步数据(Redis 5.0+ 用replicaof,5.0以下用slaveof)。
示例:replicaof 192.168.1.100 6379,表示当前从节点连接IP为192.168.1.100、端口为6379的主节点。
6.1.2 masterauth:主节点密码(从节点配置)
默认配置:# masterauth <master-password>(注释状态)
含义:若主节点设置了访问密码(requirepass),从节点必须配置该参数,否则无法连接主节点同步数据。
示例:masterauth 123456,与主节点的requirepass保持一致。
6.1.3 replica-serve-stale-data:从节点同步期间是否响应旧数据
默认配置:replica-serve-stale-data yes
含义:当从节点与主节点断联(如网络故障),或正在同步数据时,是否允许从节点响应客户端的读请求(返回旧数据)。
详细说明:
-
yes(默认):允许响应旧数据,保证读服务不中断,但数据可能陈旧;
-
no:除INFO、PING等少数命令外,拒绝响应读请求,返回错误"SYNC with master in progress",适合对数据一致性要求高的场景。
6.1.4 replica-read-only:从节点是否只读
默认配置:replica-read-only yes
含义:设置从节点是否为只读模式,禁止执行写操作。
实战建议:保持默认yes,防止误操作从节点导致主从数据不一致;若需要临时在从节点执行写操作(如调试),可通过CONFIG SET replica-read-only no动态修改。
6.1.5 repl-diskless-sync:是否开启无盘同步
默认配置:repl-diskless-sync no
含义:主节点向从节点同步数据时,是否使用无盘同步(直接通过Socket传输RDB数据,不写入磁盘)。
详细说明:
-
no(默认):使用磁盘同步,主节点先将RDB数据写入磁盘,再发送给从节点,适合网络一般但磁盘性能较好的场景,且可复用RDB文件给多个从节点;
-
yes:开启无盘同步,主节点直接通过Socket将RDB数据发送给从节点,不写入磁盘,适合磁盘速度极慢但网络速度极快的场景(如SSD性能差,万兆网卡)。
6.2 集群配置(Redis Cluster)
Redis Cluster用于实现分布式部署,将数据分片存储在多个节点,实现高可用和高并发,核心配置如下(仅列出关键项):
6.2.1 cluster-enabled:是否启用集群模式
默认配置:cluster-enabled no
含义:控制当前Redis实例是否以集群节点的身份运行,开启后才能加入Redis集群。
实战建议:集群部署时,设置为cluster-enabled yes,非集群部署保持默认no。
6.2.2 cluster-config-file:集群配置文件
默认配置:cluster-config-file nodes.conf
含义:集群节点的配置文件,由Redis自动生成和更新,无需手动编辑,用于存储集群节点信息、分片信息等。
6.2.3 cluster-node-timeout:节点超时时间
默认配置:cluster-node-timeout 15000
含义:集群中节点的超时时间,单位为毫秒,若某个节点超过该时间未响应,集群会判定该节点下线,并触发故障转移。
实战建议:保持默认15000ms(15秒),若网络不稳定,可适当增大该值(如20000ms)。
七、安全配置(Security)------ 防止未授权访问
Redis默认无密码、可直接访问,若暴露在外网,极易被攻击(如篡改数据、植入挖矿程序),安全配置是生产环境的必选项。
7.1 requirepass:访问密码
默认配置:# requirepass foobared(注释状态,默认无密码)
含义:设置Redis的访问密码,客户端连接Redis时,需通过AUTH 密码命令认证后,才能执行命令。
示例:requirepass 123456Abc!(建议设置复杂密码,包含字母、数字、特殊符号,避免简单密码被破解)。
注意:设置密码后,使用redis-cli连接时,需加上密码参数:redis-cli -a 123456Abc!,或连接后执行AUTH 123456Abc!认证。
7.2 rename-command:重命名/禁用危险命令
默认配置:无(危险命令默认可用)
含义:重命名或禁用Redis中的危险命令(如FLUSHDB、FLUSHALL、CONFIG等),防止误操作或恶意攻击。
示例(常用配置):
# 禁用FLUSHDB(清空当前数据库)和FLUSHALL(清空所有数据库)命令
rename-command FLUSHDB ""
rename-command FLUSHALL ""
# 重命名CONFIG命令(避免恶意修改配置)
rename-command CONFIG "CONFIG_MD5"
# 重命名DEL命令(防止误删数据,可选)
rename-command DEL "SAFE_DEL"
详细说明:将命令重命名为空字符串(""),表示禁用该命令;重命名为其他字符串,需记住新命令名,才能执行该命令。
实战建议:生产环境必须禁用FLUSHDB、FLUSHALL命令,CONFIG命令可重命名,避免恶意修改配置。
八、客户端配置(Clients)------ 控制客户端连接
客户端配置主要控制Redis允许的客户端连接数、连接缓冲区等,避免因客户端连接过多导致Redis性能下降。
8.1 maxclients:最大客户端连接数
默认配置:maxclients 10000
含义:Redis允许同时连接的最大客户端数量,超过该数量后,新的客户端连接会被拒绝(返回错误)。
详细说明:生产环境需根据业务并发量调整,例如高并发场景(每秒万级请求),可设置为maxclients 50000;同时需优化内核参数net.core.somaxconn,确保内核允许足够的连接队列。
8.2 client-output-buffer-limit:客户端输出缓冲区限制
默认配置:
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
含义:限制客户端输出缓冲区的大小,避免某个客户端占用过多内存(如客户端读取大量数据时,缓冲区堆积过多数据)。
详细说明(格式:client-output-buffer-limit 客户端类型 硬限制 软限制 软限制时间):
-
normal:普通客户端(如redis-cli、应用程序客户端),默认0 0 0,表示无限制;
-
replica:从节点客户端(主节点向从节点同步数据时的连接),硬限制256mb(缓冲区达到256mb时,立即断开连接),软限制64mb(缓冲区达到64mb,且持续60秒,断开连接);