INCLUDES
# Redis支持以"includes"的方式引入其他配置文件
# 假如多个一个配置项在不同配置文件中都有定义,则以最后一行读入的为准
include /path/to/local.conf
MODULES
# Redis4.0以后引入模块系统
# 可以引入各种各样的模块开发一些功能
loadmodule /path/to/my_module.so
NETWORK
# 默认情况下,不配置bind,Redis监听来自服务器上所有可用网络接口的连接
# 警告:如果运行Redis的计算机直接暴露在互联网上,绑定到所有的接口是很危险的
#,并会将实例暴露给互联网上的每个人
bind 192.168.1.100 10.0.0.1
bind 127.0.0.1 ::1
# 设置是否开启网络保护模式,默认为yes(开启)
# 如果没有设置bind参数,也没有设置安全登录密码,则当这个参数开启时Redis只允许本地连接的客户端访问
protected-mode yes
# Redis服务的工作端口,默认为6379
port 6379
# 表示socket监听(listen)的backlog上限
# backlog是指已经和服务器完成了TCP三次握手确认,但是还没有被上层应用程序处理的请求队列
# 参数在操作系统层面的默认值是128,Linux服务器上有一个配置参数“net.core.somaxconn”
# Redis配置的tcp-backlog应该小于或者等于您在操作系统上设置的最大限制值(否则Redis上面设置再大也没有用)
tcp-backlog 511
# 除了监听端口,Redis还支持通过unixsocket方式来接收请求,并通过unixsocket perm来参数指定文件的权限
unixsocket /tmp/redis.sock
unixsocketperm 777
# 当Redisclient一直没有请求发向server端,那么server端有权主动关闭这个连接,
# 可以通过timeout来设置"空闲超时时限",0表示永不关闭。
timeout 0
# 客户端TCP连接的健康性检查,如果不设置为0就表示Redis服务端会定时发送SO_KEEPALIVE心跳机制检测客户端的反馈情况
# 配置的默认值为300秒,300秒检测一次
# 健康性检查的好处是,在客户端异常关闭的情况下,Redis服务端可以发现这个问题,并主动关闭对端通道
tcp-keepalive 300
GENERAL
# 是否用守护线程的方式启动Redis
daemonize no
# 可以通过upstart和systemd管理Redis守护进程
# 可选值no、upstart、systemd、auto
supervised no
# Redis以守护进程方式运行时,会把pid写入该pid文件
# 默认值是/var/run/redis.pid
pidfile /var/run/redis.pid
# 定义日志级别,默认值为notice
# 可选值:
# debug(记录大量日志、适合测试环境)
# verbose(较多日志信息)
# notice(适量日志信息、适合生产环境)
# warning(仅记录重要信息)
loglevel notice
# 日志文件的位置
# 指定空字符串时,未标准输出,如果是Redis以守护进程模式运行,日志输出到/dev/null
logfile ""
# 是否将日志输出到系统日志,默认值为no
syslog-enabled no
# 设置系统日志的id
syslog-ident redis
# 指定syslog设备,必须是user或local0到local7
syslog-facility local0
# 设置数据库数目,默认数值为16。
# 默认的数据库是DB0。可以通过SELECT <dbid>来选择一个数据库,dbid是[0,'databases'-1]的数字
databases 16
# Redis启动时是否展示ASCII艺术logo
always-show-logo yes
SNAPSHOTTING
# save <seconds> <changes>
# 用来设置多少秒内至少多少个变更操作触发snapshot
# snapshot最终会成新的dump.rdb文件
# save ""可以禁用snapshot功能
save 900 1
save 300 10
save 60 10000
# 快照功能开启,后台持久化操作失败,Redis则会停止接受更新操作
# 如果后台持久化操作进程再次工作,Redis会自动允许更新操作
# 设置no可以禁用此功能
stop-writes-on-bgsave-error yes
# 备份快照时是否进行压缩
# 开启(yes)会消耗一定CPU资源,但会减小rdb文件的大小
rdbcompression yes
# 是否校验rdb文件
# 从RDB版本5开始,一个CRC64的校验就被放在了文件末尾
# 开启会提高文件容错性,但在存储或者加载rbd文件的时候会有一个10%左右的性能下降
# 设置为no可以关闭此功能,没有校验的RDB文件会有一个0校验位,来告诉加载代码跳过校验检查
rdbchecksum yes
# 快照文件名称
dbfilename dump.rdb
# 工作目录,rdb、aof文件都会存储在该目录
dir ./
REPLICATION
# 设置当前实例为另一个Redis实例的从库
replicaof <masterip> <masterport>
# Redis主库如果开启密码保护(requirepass),从库进行同步时需要进行验证
# masterauth <master-password>
# 当从库同主库失去连接或者复制正在进行,从库处理客户端请求的方式
# yes:继续响应客户端的请求
# no:除了INFO, replicaOF, AUTH, PING, SHUTDOWN, REPLCONF, ROLE, CONFIG,SUBSCRIBE, UNSUBSCRIBE, PSUBSCRIBE, PUNSUBSCRIBE, PUBLISH, PUBSUB,COMMAND, POST, HOST:,LATENCY以上命令都会返回一个错误信息"SYNC with master in progress"
replica-serve-stale-data yes
# Redis 2.6 以后从库默认只读
replica-read-only yes
# 是否使用socket方式复制数据
# 目前redis复制提供两种方式:disk和socket,默认是disk
# disk方式:master创建一个新的进程把rdb文件保存到磁盘,再把磁盘上的rdb文件传递给slave,多个slave都能共享这个rdb文件
# socket方式:master创建一个新的进程,直接把rdb文件以socket的方式发给slave,一个个slave顺序复制
# 在磁盘速度缓慢,网速快的情况下推荐用socket方式
# no使用disk方式,yes使用socket方式
repl-diskless-sync no
# diskless复制的延迟时间,防止设置为0。一旦复制开始,节点不会再接收新slave的复制请求直到下一个rdb传输。所以最好等待一段时间,等更多的slave连上来。
repl-diskless-sync-delay 5
# 设置从库每隔多少秒向主库发送PING来表示验证两者连接是否正常,默认值是10s
repl-ping-replica-period 10
# 主从复制超时时间
# slave角度:在repl-timeout时间内没有收到master SYNC传输的rdb snapshot数据认为主从复制超时
# slave角度:在repl-timeout没有收到master发送的数据包或者ping认为主从复制超时。
# master角度:在repl-timeout时间没有收到REPCONF ACK确认信息认为主从复制超时
# 设置参数时,repl-timeout > repl-ping-replica-period,否则在主从节点之间数据量较低的情况下,可能会一直检测超时
repl-timeout 60
# 主要用于控制主从节点同步数据的速率
# yes:Redis将使用更小的TCP报文和更少的带宽来进行数据同步操作,能够控制Redis数据同步的流量,坏处就是增加了数据同步的时延。
repl-disable-tcp-nodelay no
# master节点会为slave节点配置一个复制缓冲区,用来保存最新的需要同步的数据
# 用来指定这个缓冲区的大小
# 缓冲区越大,那么保存的数据也就越多,对slave节点离线时间的长度容忍度也就越高。
repl-backlog-size 1mb
# 主从链接断开的时间超过该配置项的值的时候,master节点将会清空这个复制缓冲区的内容。
repl-backlog-ttl 3600
# 主要用于slave节点,标识了这个节点的优先级,取值范围从0~100。
# 数字越低,优先级越高。在进行主从切换的时候越有可能被sentinel节点提升为master节点。
# 0表示不会被提升为master节点
replica-priority 100
# 分别指定了最小链接到主节点的活跃的从节点的个数以及最大主从节点通信的延迟
# 如果在主从节点通信的过程中,这个两个选项的条件有一个没有满足,主节点将拒绝客户端的写入操作。
# 前者默认为3个,后者默认为10s
min-replicas-to-write 3
min-replicas-max-lag 10
# 一般来说,通过对master节点执行INFO REPLICATION命令,即可通过master节点列出所有的slave节点的相关信息(ip、port 等)。
# master节点本来是可以通过两者之间的链接来发现slave节点的IP和端口的。但是,如果在环境中启动了NAT或者端口转发机制(尤其是在Docker和k8s中),或者说,两者通信链路之间还通过了一些代理,在master上显示的slave节点的信息可能就不准确。
# 强制指定slave节点的ip和port,并将此信息通知给master节点
replica-announce-ip 5.5.5.5
replica-announce-port 1234
SECURITY
# 为Redis Server设置密码
requirepass foobared
# Redis为提升其安全性加入的配置项
# 允许用户将一些高危命令进行重命名,以防止用户不小心或者恶意对数据库做出一些危险的操作
rename-command CONFIG ""
CLIENTS
# Redis可以接收的最大连接数
# 如果Redis服务器无法将进程文件限制配置修改为maxclients指定的限制,则允许的最大客户端数将设置Redis服务器当前文件限制减去32(因为Redis保留了一部分文件描述符作为内部使用)
maxclients 10000
MEMORY MANAGEMENT
# 允许用户为Redis配置一个最大内存使用值
# 如果用户在设置了maxmemory的同时还通过maxmemory-policy设置了一定的缓存淘汰策略。
# 那么当Redis 实例的内存使用量达到阈值之后,会通过淘汰规则清理掉一部分的数据,以留出足够的空间来正常响应后续的写入操作。
# 若没有设置淘汰策略(默认为noeviction),当Redis实例的内存达到阈值之后,会拒绝写入操作,但是正常响应读取操作。
maxmemory <bytes>
# 设置数据淘汰策略
# volatile-lru:从已设置过期时间的内存数据集中挑选最近最少使用的数据淘汰
# allkeys-lru:从内存数据集中挑选最近最少使用的数据淘汰
# volatile-lfu:从已设置过期时间的内存数据集中挑选最少使用的数据淘汰
# allkeys-lfu:从内存数据集中挑选最少使用的数据淘汰
# volatile-random:从已设置过期时间的内存数据集中任意挑选数据淘汰
# allkeys-random:从数据集中任意挑选数据淘汰
# volatile-ttl:从已设置过期时间的内存数据集中挑选即将过期的数据淘汰
# noeviction:不淘汰任何数据
# 默认策略是noeviction
maxmemory-policy noeviction
# LRU、LFU、 minimal TTL并非严谨策略,而是采用估算的方式,因此可以选择取样值以便检查
# 默认值是5
# 设置10更接近真实的LRU,但是会消耗更多的CPU资源
# 设置3速度最快,但是不够精确
maxmemory-samples 5
# 从Redis5.0以后,从节点默认忽略最大内存配置,也就是说不执行淘汰策略,除非它被选举为master
replica-ignore-maxmemory yes
LAZY FREEING
# Redis4.0以后加入了LAZY FREE特性
# LAZY FREE可以理解为惰性删除和延迟释放,当删除键时,redis提供异步延时释放key内存的功能,把key的释放放在Background I/O单独的子线程中处理,减少对主线程的阻塞
# lazyfree-lazy-eviction:针对内存淘汰策略,该配置需要结合具体场景使用,开启可能使淘汰的键的内存释放不及时,导致Redis内存超用
# lazyfree-lazy-expire:针对有TTL的键,建议开启
# lazyfree-lazy-server-del:针对有些指令处理已存在的键,如RENAME命令,建议开启。开启主要解决目标建存在且是一个BIG KEY引起阻塞删除的性能问题
# replica-lazy-flush:针对SLAVE全量数据同步的场景,开启SLAVE在加载RDB前会执行FULSHALL ASYNC来异步清理数据,可以减少全量同步耗时,减少主库因输出缓冲区暴涨引起的内存使用增长
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
APPEND ONLY MODE
# 是否开启AOF模式
# yes为开启
appendonly no
# 设置AOF文件名称
appendfilename "appendonly.aof"
# FSYNC模式,FSYNC会将缓冲区的内容落地磁盘
# always:每一次写命令都会将数据落地磁盘,慢但是安全
# everysec:每一秒将数据落地磁盘
# no:不及时同步,由操作系统决定何时落地磁盘
appendfsync everysec
# 子进程执行BGREWRITEAOF和主进程写AOF文件的过程,两者都会操作磁盘,BGREWRITEAOF会造成主进程在写AOF文件的时候出现阻塞的情形
# no:最安全的方式,不会丢失数据,但是要接受阻塞问题
# yes:相当于将appendfsync设置为no,说明主进程只是将数据写入缓冲区,但是此时如果Redis挂掉,就会丢失数据。
# Linux的操作系统的默认设置下,会丢失30s的数据
no-appendfsync-on-rewrite no
# Redis会记住上一次重写AOF后的AOF文件大小,此处成为BASE SIZE
# 目前的AOF文件大小和BASE SIZE进行比较,如果超过了auto-aof-rewrite-percentage设置的百分比,将会触发自动重写功能
# auto-aof-rewrite-min-size 自动重写AOF文件时AOF文件的最小占用空间,防止文件小但增长幅度大也去重写AOF的情况
# auto-aof-rewrite-percentage设置为0可以禁用自动重写AOF功能
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
# Redis在恢复时,是否忽略最后一条可能错误的日志,默认yes
# 如果设置为no,Redis Server会终止启动
# 当选项设置为no时,需要在重启服务器之前使用redis-check-aof工具修复AOF文件
aof-load-truncated yes
# 针对RDB-AOF混合持久模式的设置
# yes:AOF重写产生的文件将同时包含RDB格式和AOF格式的内容,RDB用于记录已有的数据,AOF用于记录最近发生了变化的数据,先加载RDB格式的内容,在加载AOF格式的内容
aof-use-rdb-preamble yes