redis可以在不使用内置默认配置的配置文件的情况下启动,但是它不适合线上,根据服务器情况调整redis.conf是非常必要的。
include
redis.conf可以包含其他位置的配置文件,但是一般将include的文件放在redis.conf开头,以免它覆盖掉redis.conf的配置。
modules
需要加载的模块。
网络
bind
默认bind 127.0.0.1,仅本机可访问,可改为本机内网ip以允许局域网访问,bind 0.0.0.0或不绑定,全网可访问。
protected-mode
默认开启保护模式(protected-mode yes),在此模式下,不允许其他主机用空密码连接。
port
默认端口 6379,比较容易猜到可自行更改。
TCP listen() backlog
允许监听的未完成连接(三次握手)队列最大值,受linux内核配置(/proc/sys/net/core/somaxconn、tcp_max_syn_backlog)影响,在服务器可承受的范围内,配置越高越利于客户端连接速度的提升。
Unix socket
默认不开启unix socket连接,但是也支持,在本机通信时可用,注意权限问题。
timeout
客户端闲置多少秒后超时退出,默认0,不超时。
tcp-keepalive
在没通信的情况下,向客户端发送心跳包的时间间隔,默认是300,设为0不检测时可能导致坏点一直占据连接,时间间隔不是越小越好,它会带来额外的带宽流量消耗,还可能因为网络波动断开一些可正常使用的连接。
TCP通信并不是一次心跳通信失败就关闭连接了,它还要继续尝试,没有收到回复后的时间间隔、尝试次数相关参数由linux内核决定,redis无相关配置
tcp-keepalive配置是为了检测通信存活度,与http keep-alive长连接并不是同一个概念,长连接是为了增加连接复用。
TLS/SSL
默认关闭tls/ssl,可开启tls,指定证书、指定验证等级、主从、集群间支持配置tls、会话缓存大小、超时等参数。
总则
daemonize no
redis默认不是以守护进程方式启动,当开启守护,redis将创建/var/run/redis.pid文件。
loglevel
日志级别,debug(调试)> verbose(冗长) > notice(通知,默认)> warning(警告),日志量逐渐减少。
databases 16
默认启用16个数据库
快照
save 900 1、save 300 10、save 60 10000
默认rdb快照策略,900s内有1次变更或300s内有10次变更或60s内有10000次变更就保存一次快照。
stop-writes-on-bgsave-error yes
默认rdb保存失败,redis将停止接受写操作并且会返回错误值,如果有对redis服务器的监视和重启策略可以将此参数改为no,这样当磁盘或权限出问题时redis可以继续工作。
rdbcompression、rdbchecksum
默认开启快照文件的压缩、文件校验,但如果想尽量节省cpu可以设为no,但这样可能导致快照文件过大或出错。
dbfilename dump.rdb
rdb文件名,默认dump.rdb,可自行设置。
主从复制
replica-serve-stale-data
副本提供过时数据,默认yes。副本与主服务器失去连接或正在复制时,客户端能请求到副本可能已过期的数据,改为no时将答复以报错。
replica-read-only
副本只读,默认yes。如果改为no,此副本接受写命令时不会报错,但是它更改的数据主服务器和其他副本感受不到,除了造成数据不一致外没有其他意义。
repl-diskless-sync
磁盘复制,默认no。主副本断开连接后重连时,副本会自动同步断开期间的数据,万一这种增量同步失败,副本会向主服务器请求一次增量备份,主服务器需要创建一份当前所有数据的快照(bgrewrite)发送给这个副本,这份RDB文件传输有两种方式:网络或磁盘,网络(无盘)。
磁盘:redis master创建一个新进程来写入RDB磁盘上的文件。稍后,父进程将新文件以增量方式传输到副本。
在生成RDB文件期间可以接受其他副本的写请求,可以在生成完成后一起发给他们。
网络:redis master创建一个新进程,直接将RDB文件写入副本套接字,而完全不接触磁盘。
可以配置延迟(repl-diskless-sync-delay 5),以等待其他副本看是否有同样的请求,因为一旦开始传输,主服务器就不能立刻为其他副本发送RDB,只能等本次复制完成。
网络方式适用于网络较好而磁盘读写速度偏低的场景。在许多情况下,磁盘比网络慢,存储和加载RDB文件可能会增加复制时间(甚至增加写入内存上的主副本和SAVE缓冲区)
由于在该设置中,复制副本不会立即将RDB存储在磁盘上,在故障转移期间可能会导致数据丢失。
RDB无盘加载+Redis模块不处理I/O读取也可能导致Redis在与主同步阶段的初始同步阶段发生I/O错误时中止。
repl-diskless-load
无盘加载,默认disabled。不使用五盘加载,即先将rdb文件存储到磁盘。
可选配置项:
"on-empty-db":只有在完全安全的情况下才使用无盘加载
"swapdb":使用无盘加载,即直接使用来自网络的RDB,同时将本机内存中备份当前数据(内存要确保足够)
repl-timeout
复制超时时间默认60s,根据自己网络情况设置,不能设置太小,否则每次通信都可能超时,必须大于repl-ping-replica-period(副本向主机发送ping命令的时间间隔,默认10s)。
repl-disable-tcp-nodelay
同步后在副本套接字上禁用TCP_NODELAY, 默认no,数据在副本端出现的延迟将减少,但复制将使用更多的带宽。改为yes后redis将使用较少的TCP数据包和较少的带宽将数据发送到副本,但是这会增加数据出现在副本端的延迟。在流量非常大的情况下,或者当主副本和副本有很多跳距时,推荐设为yes。
repl-backlog-size
复制积压大小,默认1mb。backlog是一个缓冲区,当副本断开连接一段时间后,它会累积副本数据,因此当副本想要再次重新连接时,通常不需要完全重新同步,只需传递副本在断开连接时丢失的部分数据,复制积压越大,副本能够承受断开连接并且以后能够执行部分重新同步的时间就越长。
只有在至少连接了一个复制副本时,才会分配积压工作。
repl-backlog-ttl
主控器一段时间内没有连接的副本后,将释放积压,默认3600s。
副本应该配置为永远不释放积压超时,因为它们在以后升级为主服务器时,需要能够正确地“部分重新同步”其他副本。设为0即表示永不释放积压。
replica-priority
副本优先级,默认100。主服务器无法正常工作后,如果启用哨兵模式,它将据此选出下一个主服务器,数字越小优先级越高。设为0的副本不参与选举。
min-replicas-to-write 3
min-replicas-max-lag 10
要求至少3个延迟<=10秒的副本,默认是禁用的。redis主从复制是异步的,主服务器发送复制命令当时并不关心从服务器是不是立刻完成,但是可以配置这两个参数来限制,如果连接的延迟小于或等于10秒的副本少于3个,主服务器停止接受写入。
将其中一个设置为0将禁用该功能。
客户端缓存
tracking-table-max-keys
跟踪表最大密钥数,默认1000000,设置为0,则表示没有限制。