#版本:Rides-7.0.7
去除注释配置文件内容如下:
bind 0.0.0.0 #指定监听地址,支持用空格隔开的多个监听IP
protected-mode yes #redis3.2之后加入的新特性,在没有设置bind IP和密码的时候,
redis只允许访问127.0.0.1:6379,可以远程连接,但当访问将
提示警告信息并拒绝远程访问
port 6379 #监听端口,默认6379/tcp
tcp-backlog 511 #三次握手的时候server端收到client ack确认号之后的队列值,
即全连接队列长度
timeout 0 #客户端和Redis服务端的连接超时时间,默认是0,表示永不超时
tcp-keepalive 300 #TCP会话保持时间300s
daemonize no #默认no,即直接运行redis-server程序时,不作为守护进程运行,
而是以前台方式运行,如果想在后台运行需改成yes,当redis作为
守护进程运行的时候,它会写一个 pid 到/var/run/redis.pid
文件
pidfile /apps/redis/run/redis_6379.pid #pid文件路径
loglevel notice ##日志级别
logfile /apps/redis/log/redis-6379.log #日志文件路径
databases 16 #设置数据库数量,默认:0-15,共16个库
always-show-logo no #在启动redis 时是否显示或在日志中记录记录redis的logo
set-proc-title yes
proc-title-template "{title} {listen-addr} {server-mode}"
#在更改进程标题时,使用以下模块来构造修改后的标题
{title} 父进程执行的进程名称,或子进程的类型。
{listen-addr} 绑定地址或 ‘*’ 后跟 TCP 或 TLS 端口侦听,或 Unix 套接字(如果可用)。
{server-mode} 特殊模式,即“[sentinel]”或“[cluster]”。
stop-writes-on-bgsave-error yes #默认为yes时,可能会因空间满等原因快照无法保存出错时,
会禁止redis写入操作,生产建议为no。只针对配置文件中
的自动save有效
rdbcompression yes #持久化到RDB文件时,是否压缩,"yes"为压缩,"no"则反之
rdbchecksum yes #是否对备份文件开启RC64校验,默认是开启
dbfilename dump.rdb #快照文件名
rdb-del-sync-files no #默认配置是 rdb-del-sync-files no,主从进行全量同步时,
通过传输 RDB 内存快照文件实现,没有开启 RDB 持久化的实
例在同步完成后会删除该文件,通常情况下保持默认即可
dir /apps/redis/data/ #快照文件保存路径
replica-serve-stale-data yes
#当从库同主库失去连接或者复制正在进行,从机库有两种运行方式:
1、设置为yes(默认设置),从库会继续响应客户端的读请求,此为建议值
2、设置为no,除去特定命令外的任何请求都会返回一个错误"SYNC with master in progress"
replica-read-only yes #是否设置从库只读,建议值为yes,否则主库同步从库时可能会
覆盖数据,造成数据丢失
repl-diskless-sync yes
#是否使用socket方式复制数据(无盘同步),新slave第一次连接master时需要做数据的全量同步,
redisserver就要从内存dump出新的RDB文件,然后从master传到slave,
有两种方式把RDB文件传输给客户端:
1、基于硬盘(disk-backed):为no时,master创建一个新进程dump生成RDB磁盘文件,RDB完成之后由
父进程(即主进程)将RDB文件发送给slaves,此为默认值
2、基于socket(diskless):master创建一个新进程直接dump RDB至slave的网络socket,不经过主
进程和硬盘
推荐使用基于硬盘(为no),是因为RDB文件创建后,可以同时传输给更多的slave,
但是基于socket(为yes), 新slave连接到master之后得逐个同步数据。只有当磁盘I/O较慢且网络较快
时,可用diskless(yes),否则一般建议使用磁盘(no)
repl-diskless-sync-delay 5
#diskless时复制的服务器等待的延迟时间,设置0为关闭,在延迟时间内到达的客户端,会一起通过diskless方式同步数据,但是一旦复制开始,master节点不会再接收新slave的复制请求,直到下一次
同步开始才再接收新请求。即无法为延迟时间后到达的新副本提供服务,新副本将排队等待下一次RDB传
输,因此服务器会等待一段时间才能让更多副本到达。推荐值:30-60
repl-diskless-sync-max-replicas 0
#如果是无硬盘传输,如果预期的最大副本数已连接,则可以在最大延时之前进行复制在主服务器配置
repl-diskless-sync-max-replicas <int> 默认 0 标识未定义
repl-diskless-load disabled
#是否使用无磁盘加载,有三项:
disabled:不要使用无磁盘加载,先将rdb文件存储到磁盘
on-empty-db:只有在完全安全的情况下才使用无磁盘加载
swapdb:解析时在RAM中保留当前db内容的副本,直接从套接字获取数据。
默认配置项:repl-diskless-load disabled
repl-disable-tcp-nodelay no
#是否在slave套接字发送SYNC之后禁用 TCP_NODELAY,如果选择"yes",Redis将合并多个报文为一个
大的报文,从而使用更少数量的包向slaves发送数据,但是将使数据传输到slave上有延迟,Linux内核
的默认配置会达到40毫秒,如果 "no" ,数据传输到slave的延迟将会减少,但要使用更多的带宽
replica-priority 100 #当master不可用,哨兵Sentinel会根据slave的优先级选举
一个master,此值最低的slave会优先当选master,而配置
成0,永远不会被选举,一般多个slave都设为一样的值,让
其自动选择
acllog-max-len 128
requirepass 123456 #设置redis连接密码,之后需要AUTH pass,如果有特殊符号,
用" "引起来,生产建议设置
lazyfree-lazy-eviction no #表示当 Redis 运行内存超过 maxmeory 时,是否开启lazy
free机制删除
lazyfree-lazy-expire no #表示设置了过期时间的键值,当过期之后是否开启 lazy free
机制删除
lazyfree-lazy-server-del no
#有些指令在处理已存在的键时,会带有一个隐式的 del 键的操作,比如 rename 命令,当目标键已存在,Redis 会先删除目标键,如果这些目标键是一个 big key,就会造成阻塞删除的问题,此配置表示在这种场景中是否开启 lazy free 机制删除
replica-lazy-flush no
#针对 slave(从节点) 进行全量数据同步,slave 在加载 master 的 RDB 文件前,会运行 flushall来清理自己的数据,它表示此时是否开启 lazy free机制删除
lazyfree-lazy-user-del no #用户执行DEL命令时,Redis转为UNLINK命令执行
lazyfree-lazy-user-flush no #区分同步和异步操作,默认为no,即同步操作
oom-score-adj no
#no:对oom-score-adj不做任何修改(默认值)
yes:relative的别名
absolute:oom-score-adj-values配置的值将写入内核
relative:当服务器启动时,使用相对于oom_score_adj初始值的值,然后将其限制在-1000到1000的范围内。因为初始值通常为0,所以它们通常与绝对值匹配
oom-score-adj-values 0 200 800
#默认 oom-score-adj-values 不设置的状况下会优先杀死后台子进程,而后主从节点优先杀死从节点。
因此这 3 个值分别用来设置主、从、后台子进程的分值的,分值范围从-1000~1000,分值越高越有可能被先杀死
disable-thp yes #用户控制THP是否开启
appendonly no #默认是no,yes就打开aof持久化
appendfilename "appendonly.aof" #指定更新日志文件名,默认为appendonly.aof
appenddirname "appendonlydir" #指定持久化文件存放目录
appendfsync everysec
#有三种模式:
always:每次事件循环都进行一次同步操作(主线程)
everysec:每秒进行一次同步操作(另一个线程)
no:由操作系统控制同步操作(操作系统)
no-appendfsync-on-rewrite no #此项设置为no,最为安全,建议不要修改
auto-aof-rewrite-percentage 100
#指定 Redis 重写 AOF 文件的条件,默认为 100,它会对比上次生成的 AOF 文件大小。如果当前 AOF 文件的增长量大于上次 AOF 文件的 100%,就会触发重写操作;如果将该选项设置为 0,则不会触发重写操作
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
aof-timestamp-enabled no
slowlog-log-slower-than 10000
#以微秒为单位的慢日志记录,为负数会禁用慢日志,为0会记录每个
命令操作。默认值为10ms,一般一条命令执行都在微秒级,生产建议设为1ms-10ms之间
slowlog-max-len 128
#最多记录多少条慢日志的保存队列长度,达到此长度后,记录新命令会将最旧的命
令从命令队列中删除,以此滚动删除,即,先进先出,队列固定长度,默认128,值偏小,生产建议设为
1000以上
latency-monitor-threshold 0
#redis延时监控系统在运行时会采样一些操作,以便收集可能导致延时的数据根源。
通过 LATENCY命令 可以打印一些图样和获取一些报告,方便监控
这个系统仅仅记录那个执行时间大于或等于预定时间(毫秒)的操作,
这个预定时间是通过latency-monitor-threshold配置来指定的,
当设置为0时,这个监控系统处于停止状态
notify-keyspace-events "" #用于配置键空间的事件通知功能
hash-max-listpack-entries 512 #指定使用 listpack 存储的最大条目数
hash-max-listpack-value 64 #listpack 中,条目 value 值最大字节数,建议
设置成 1024
list-max-listpack-size -2 #表示限制每个listpack大小
list-compress-depth 0
#表示一个quicklist两端不被压缩的节点个数。这里的节点是指quicklist双向链表的节点,而不是指ziplist里面的数据项个数参数
set-max-intset-entries 512 #intset能存储的最大元素个数,超过则用hashtable编码
zset-max-listpack-entries 128 #zset 数据结构优化参数
zset-max-listpack-value 64 #单个元素大小超过64byte,将用skiplist
hll-sparse-max-bytes 3000
#value大小小于等于hll-sparse-max-bytes使用稀疏数据结构(sparse),大于hll-sparse-max-bytes使用稠密的数据结构(dense)。一个比16000大的value是几乎没用的,建议的value大概为3000。如果对CPU要求不高,对空间要求较高的,建议设置到10000左右
stream-node-max-bytes 4096 #限制单个宏节点占用的最大内存
stream-node-max-entries 100 #指定每个宏节点中可存储条目的最大数量
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10 #设置 Redis 后台任务执行频率,例如清除过期键任务
dynamic-hz yes
#可选值为yes和no,分别代表开启动态hz和关闭动态hz,默认值为yes。当动态hz开启时,您设置的hz参数的值,即configured_hz,将作为基线值,而Redis服务中的实际hz值会在基线值的基础上根据已连接到Redis的客户端数量自动调整,连接的客户端越多,实际hz值越高,Redis执行定期任务的频率就越高
aof-rewrite-incremental-fsync yes
#当一个子进程rewrite AOF file时,如果该值设置为yes, 则该文件每产生32mb文件时,就会被fsync-ed,从而避免一次性fsync的延迟
rdb-save-incremental-fsync yes
#默认yes,开启该参数后,生成 RDB 文件时,每产生 32 MB 数据就执行一次 fsync
jemalloc-bg-thread yes #默认yes,启用于jemalloc清理线程