文章目录
版本说明
本文配置解析基于redis4.0.8配置文件。
单位说明
- 1k => 1000 bytes
- 1kb => 1024 bytes
- 1m => 1000000 bytes
- 1mb => 1024*1024 bytes
- 1g => 1000000000 bytes
- 1gb => 102410241024 bytes
redis配置文件对大小写不敏感也就是说你使用1GB 、Gb、1gB都是相同的。
配置模块
1.includes相关配置
include
- 说明:可以把其他的配置文件引入到当前配置文件里面,适合用于公共的配置属性文件,然后各个redis实例都include该配置文件。
- 默认值:空
- 配置样例:include /path/to/local.conf
2.模块相关配置
loadmodule
- 说明:redis启动时加载配置好的模块,可以同时使用多个loadmodule配置加载多个模块。
- 默认值:空
- 配置样例:loadmodule /path/to/my_module.so
3.网络相关配置
bind
- 说明:监听一个或多个ip地址
- 默认值:bind 127.0.0.1
- 配置样例:bind 127.0.0.1
protected-mode
- 说明:是否开启保护模式,该模式开启之后,在没有开启密码验证的情况下只能通过本机访问redis-server,或者设置密码才能进行公网访问
- 默认值:yes(开启)
port
- 说明:接受指定端口上的连接,如果port设置为0将不会接受任何连接。
- 默认值:6379
tcp-backlog
- 说明:确定tcp连接中已完成三次握手的最大队列长度,在高并发的坏境中需要将其调大以避免客户端连接缓慢的问题,但是注意这个参数必须和/proc/sys/net/core/somaxconn一起配置,如果/proc/sys/net/core/somaxconn的值小于tcp-backlog的值,linux内核会将其截断为somaxconn值。
- 默认值:511
timeout
- 说明:在客户端空闲N秒后关闭这个连接,单位为秒,0表示禁用这个功能。
- 默认值:0
tcp-keepalive
- 说明:该参数如果设置不为0,则使用这个参数的值给客户端发送ack信号,主要是用来检测中间设备出问题而导致网络看似连接却已经与对端端口的问题的客户端,关闭连接需要两倍的时间。
- 默认值:300秒
4.general模块配置
daemonize
- 说明:是否需要以守护进程运行redis,如果将这个配置设置yes表示开启这个功能。
- 默认值:no
supervised
- 说明:如果你需要从upstart或者systemd去运行redis,那么需要将改配置设置为对应的值。supervised的配置选择有四个no、upstart、systemd、auto
- 默认值:no
pidfile
- 说明:创建pid文件路径配置。
- 默认值:/var/run/redis_6379.pid
loglevel
- 说明:redis日志等级配置,配置可选值有debug、verbose、notice、warning。
debug:很多日志信息对开发测试比较有用。
verbose:也有很多信息,但是比debug稍微好点。
notice:开发坏境用。
warning:只记录非常关键的日志。 - 默认值:notice
logfile
- 说明:日志名称。空字符串表示标准输出。注意如果redis配置为后台进程,标准输出中信息会发送到/dev/null
- 默认值:""
syslog-enabled
- 说明:是否启用日志功能。
- 默认值:yes(启用)
syslog-ident
- 说明:指定日志标识。
- 默认值:redis
databases
- 说明:设置数据库数量。
redis默认选择的是db0,如果需要访问不同的数据库可以select 0~databases-1中的任意一个数字。 - 默认值:16
5.快照持久化相关配置
save
- 说明:Redis通过fork子进程,由子进程在后台实现异步dump磁盘,触发dump磁盘的条件就是save命令后面的配置,save seconds changes 表示seconds秒内有changes个key发生变化的时候就会就会dump磁盘生成一个快照文件。
- 默认值:默认值有三个配置。
save 900 1 (900秒内有1个键改变就会进行持久化操作)
save 300 10 (300秒内有10个键改变就会进行持久化操作)
save 60 10000(60秒内有10000个键改变就会进行持久化操作)
stop-writes-on-bgsave-error
- 说明:默认情况下如果启用了这个配置,当最近的一次rdb快照生成失败,redis将不再接受相关的写命令,以此来提醒用户备份的失败。
- 默认值:yes
rdbcompression
- 说明:是否对生成的rdb快照文件进行压缩。
- 默认值:yes(表示对快照文件进行压缩)
rdbchecksum
- 说明:是否启用rdb文件是否启用CRC64文件数据完整性检查 ,开启文件检查在加载rdb文件或者储存rdb文件的时候会有百分之10的性能下降
- 默认值:yes(表示开启文件检查)
dbfilename
- 说明:储存rdb的文件名。
- 默认值:dump.rdb
dir
- 说明:rdb文件储存的目录。
- 默认值:./
6.主从复制相关配置
slaveof
- 说明:主从复制master节点配置,配置规则为slaveof masterip masterport,masterip表示主机ip,masterport表示主机端口。
- 默认值:空。
masterauth
- 说明:主机密码配置,如果主机设置了密码配置,这里需要填写对应的主机密码,从机才能进行复制操作。
- 默认值:空
slave-serve-stale-data
- 说明:当slave与master失去连接的时候或者复制正在进行时,当slave-serve-stale-data被设置为yes表示slave可以相应客户端的请求,如果为no时slave将会拒绝请求返回一个SYNC with master in progress错误信息
- 默认值:yes
slave-read-only
- 说明:是否允许slave接受写操作,如果slave-read-only设置为yes表示slave只能读不能写,如果为no,表示只能接受读服务,不过slave即便是可以支持写服务,从节点上的数据也是很容易会被主从同步而删除的。
- 默认值:yes
6.1 无盘复制相关配置
主从同步复制方案总共有三种:
1.增量同步,该方式同步的是指令流,这个指令流是一个环形数组,主节点会将修改的指令存在buffer中,然后异步将buffer内容同步至从节点,当主从断开时间较长时,环形buffer中的数据已经被覆盖则需要更复杂的同步机制。
2.快照同步,快照同步是master进行一次bgsave将内容全部快照到磁盘上,然后将快照文件内容全部传送至从节点,从节点接受完毕之后进行一次全量加载,加载完毕后会立马通知master进行增量同步,但是这期间如果耗时过长或者buffer太小会导致二次进行该操作。
3.无盘同步,无盘同步复制是采用socket进行操作的,master节点会进行一次遍历,一边遍历内存数据一边将内容序列化之后通过socket发给从节点,从节点接受完毕后进行一次全量操作。
repl-diskless-sync
- 说明:是否开启无盘复制。
- 默认值:no
repl-diskless-sync-delay
- 说明:基于socket的无盘复制的等待时间,
- 默认值:5秒。
repl-ping-slave-period
- 说明:从库会按照一个时间间隔向主库发送PINGs。
- 默认值:10秒
repl-timeout
- 说明:设置主库批量数据传输时间或者ping回复时间间隔,一定要确保repl-timeout大于repl-ping-slave-period值。
- 默认值:60秒
repl-disable-tcp-nodelay
- 说明:是否开启延迟同步,如果开启无盘复制会采用较少tcp数据包去同步,会占用较小的宽带,如果关闭,则会将延迟减少,从而会占用大量宽带数据。
- 默认值:no
repl-backlog-size
- 说明:复制缓冲区,当从节点断开一段时间后如果缓冲区未超出则无需再次进行完全的重新同步,只需要部分重新同步就行,该配置从节点为1个时可用。
- 默认值:1mb
repl-backlog-ttl
- 说明:与repl-backlog-size搭配使用,如果超过repl-backlog-ttl设置的时间将会把缓冲区释放。
- 默认值:3600秒
slave-priority
- 说明:从节点升级为主节点优先级设定,数值如果存在三个从节点优先级分别为10、25、100,那么Sentinel会选择优先级为10的升级为主节点,注意0将不会被升级。
- 默认值:100
min-slaves-to-write N
min-slaves-max-lag M
- 说明:如果少于 N 个 slave 连接,且延迟时间 <=M 秒,则 master 可配置停止接受写操作。设置 0 为禁用
- 默认值:N=3、M=10
7.安全相关配置
requirepass
- 说明:设置密码
- 默认值:空
rename-command
- 说明:将某些命令进行别名化,例如config命令,rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52。
- 默认值:无。
8.客户端相关配置
maxclients
- 说明:redis最大连接客户端数量。
- 默认值:10000
9.内存管理相关配置
maxmemory
maxmemory-policy
-
说明:maxmemory为redis内存最大使用的字节数,超过限制后将会删除内存数据,删除策略由maxmemory-policy控制,maxmemory-policy配置有以下选择:
-
1.volatile-lru:尝试淘汰设置了过期时间的 key,最少使用的 key 优先被淘汰。没有设置过
期时间的 key 不会被淘汰,这样可以保证需要持久化的数据不会突然丢失。2.allkeys-lru:区别于 volatile-lru,这个策略要淘汰的 key 对象是全体的 key 集合,而不
只是过期的 key 集合。这意味着没有设置过期时间的 key 也会被淘汰。3.volatile-lfu:尝试淘汰设置了过期时间的key,最不常用的key优先被淘汰,与volatile-lru的却别在于lfu记录 访问次数而lru一访问就会放置最前面,没有设置过的key将会被淘汰。
4.allkeys-lfu:区别于volatile-lfu,所有key都会进行淘汰。
5.volatile-ttl:跟上面一样,除了淘汰的策略不是 LRU,而是 key 的剩余寿命 ttl 的值,ttl
越小越优先被淘汰。6.volatile-random:对设置了过期时间的key进行随机淘汰策略。
7.allkeys-random:对所有key进行随机淘汰策略。
8.noeviction:不会继续服务写请求 (DEL 请求可以继续服务),读请求可以继续进行。这样
可以保证不会丢失数据,但是会让线上的业务不能持续进行。这是默认的淘汰策略。 -
默认值:noeviction
maxmemory-samples
- 说明:LRU、LFU、volatile-ttl三种策略采用的是近似算法,每次都从待选池中取maxmemory-samples个key,然后按照算法淘汰一个key,如果内存还是不足则继续做相同操作,为了保证redis不会进入死循环,整个操作的循环时间上限为25ms。
注意:即便是设置的上限为25ms也无法解决根本问题,如果过期的key在某一时刻非常多,那么在某一段时间内重复进行25ms为周期的过期删除操作也是有可能的,所以使用过期key的时候只要不是时间非常敏感的可以在过期时间上加上一个随机值以防止上述问题。 - 默认值:5
9.1惰性释放相关配置
lazyfree-lazy-eviction
- 说明:针对redis内存使用达到maxmeory,并设置有淘汰策略时;在被动淘汰键时,是否采用lazy free机制;因为此场景开启lazy free, 可能使用淘汰键的内存释放不及时,导致redis内存超用,超过maxmemory的限制。此场景使用时,请结合业务测试。
- 默认值:no
lazyfree-lazy-expire
- 说明:针对设置有TTL的键,达到过期后,被redis清理删除时是否采用lazy free机制。
- 默认值:no
lazyfree-lazy-server-del
- 说明:del命令是否异步执行删除操作。
- 默认值:no
slave-lazy-flush
- 说明:针对slave进行全量数据同步,slave在加载master的RDB文件前会运行flushall来清理自己的数据,参数设置决定是否采用异常flush机制。
- 默认值:no
10.AOF持久化相关配置
appendonly
- 说明:是否打卡aof持久化
- 默认值:no
appendfilename
- 说明:aof持久化写入的文件名。
- 默认值:appendonly.aof
appendfsync
- 说明:aof持久化的方式,目前支持三种方式:
1.always:每次收到写命令就立即强制写入磁盘,完全保证数据被持久化,但问题是redis速度会被拖慢,一般不推荐。
2.everysec:每秒钟强制写入磁盘一次,在性能和持久化方面做了很好的折中,推荐的方式。
3.no:完全依赖系统调度,一般为30秒左右一次,性能最好但是持久化最没有保证,不被推荐。 - 默认值:everysec
no-appendfsync-on-rewrite
- 说明:在日志重写时,不进行命令追加操作,而只是将其放在缓冲区里,避免IO上的冲突,这个地方如果aof重写以及bgsave的时候延迟较长建议开启。
- 默认值:no
auto-aof-rewrite-percentage
- 说明:重写aof日志的条件,如果对比上次aof日志大小的时候,目前aof大于上次aof文件百分之比就会触发aof日志重新。
- 默认值:100(也就是对比上次aof当前aof日志已经是上次的aof的两倍)
auto-aof-rewrite-min-size
- 说明:aof日志重写的最小值,和auto-aof-rewrite-percentage对应,因为aof日志较小时,百分之百的增幅是很快就能达到的,所以设定了一个最小的aof日志大小。
- 默认值:64mb
aof-load-truncated
- 说明:redis启动过程中当aof数据被加载回内存的时候会进行aof日志截断,如果这个时候系统出现问题但操作系统仍可继续运行,这个时候是尽可能的加载更多的aof数据还是直接报错由aof-load-truncated配置决定。
- 默认值:yes(尽可能的加载更多的aof数据)
11.Lua相关配置
lua-time-limit
- 说明:lua脚本最大的执行时间(以毫秒为单位)。
- 默认值:5000
12.慢日志配置
slowlog-log-slower-than
- 说明:慢日志指定执行时间超过多少微秒的命令请求会被记录到日志上。
- 默认值:10000
slowlog-max-len
- 说明:慢日志最多保存多少条。
- 默认值:128
13.高级配置
hash-max-ziplist-entries
hash-max-ziplist-value
- 说明:这两个配置是控制redis中hash的储存结构阈值,如果两个条件满足其一hash采用标准结构也就是hashtable去储存hash数据,如果两个条件都不满足则会采用压缩链表来储存hash数据。
- 默认值:entries 512(元素个数不超过512)、value 64 (单个数据不超过64bytes)
list-max-ziplist-size
- 说明: 该配置控制redis中list的储存结构阈值,如果超过阈值则会采用标准结构,没有超过采用压缩链表储存,可选配置有以下几个。
-5: max size: 64 Kb <-- not recommended for normal workloads
-4: max size: 32 Kb <-- not recommended
-3: max size: 16 Kb <-- probably not recommended
-2: max size: 8 Kb <-- good
-1: max size: 4 Kb <-- good - 默认值:-2 (表示单个数据不超过8kb则会采用紧凑结构储存)
list-compress-depth
- 说明:当列表很长的时候,最容易被访问的很可能是两端的数据,中间的数据被访问的频率比较低(访问起来性能也很低)。该选项就是是否开启对list中间的数据节点进行压缩。
- 默认值:0(表示不进行压缩)
set-max-intset-entries
- 说明:控制redis中set数据储存结构的阈值。
- 默认值:512
zset-max-ziplist-entries
zset-max-ziplist-value
- 说明:同hash的配置说明。
- 默认值:entries 128、value 64
hll-sparse-max-bytes
- 说明:HyperLogLog添加的值小于hll-sparse-max-bytes时使用稀疏数据结构(sparse),大于hll-sparse-max-bytes使用稠密的数据结构(dense)。一般来说大于16000的value几乎是没有的,建议的value大概为3000。如果对CPU要求不高,对空间要求较高的,建议设置到10000左右。
- 默认值:3000
activerehashing
- 说明:redis会在每100毫秒时使用1毫秒的CPU时间来对redis的hash表进行重新hash,可以降低内存的使用,在并发非常高的情况下如果不能接受查询有毫秒级延迟的损耗的话可以将该配置设置为no,如果要求没那么严格,可以设置为yes可以及时的优化内存。
- 默认值:yes
14.内存碎片化整理配置
activedefrag
- 说明:是否开启内存碎片化整理。
- 默认值:yes
active-defrag-ignore-bytes 100mb
- 说明:当碎片达到100mb时,开启内存碎片整理。
active-defrag-threshold-lower 10
- 说明:当碎片占比超过百分之十时,开启内存碎片整理。
active-defrag-threshold-upper 100
- 说明:内存碎片超过 100%,则尽最大努力整理
active-defrag-cycle-min 25
- 说明:内存整理最小占用cpu25%。
active-defrag-cycle-max 75
- 说明:内存整理最大占用cpu75%。