redis3.0.0配置文件详解

时间:2021-08-24 20:36:13

下面是redis3.0.0自带配置文件的默认配置,包括了大部分配置项,配置项和值是成对出现的,比如1)是配置参数,2)则是1)的值。


127.0.0.1:6379> config get *
  1) "dbfilename"   

rdb文件的名称,可以动态修改
  2) "dump.rdb"
  3) "requirepass"  

requirepass配置可以让用户使用AUTH命令来认证密码,才能使用其他命令。可以动态修改
  4) ""
  5) "masterauth"  

如果master设置了requirepass,那么slave要连上master,需要有master的密码才行。masterauth就是用来配置master的密码,这样可以在连上master后进行认证。可以动态修改
  6) ""
  7) "unixsocket"   

配置unix socket来让redis支持监听本地连接,不可以动态修改
  8) ""
  9) "logfile"          

指定了记录日志的文件。空字符串的话,日志会打印到标准输出设备。后台运行的redis标准输出是/dev/null。不可以动态修改。
 10) ""
 11) "pidfile"         

redis使用守护进程运行的时候保存的pid文件,不可以动态修改
 12) "/var/run/redis.pid"
 13) "maxmemory"  

redis配置的最大内存容量。为0表示没有内存上限。slave的输出缓冲区是不计算在maxmemory内的。可以动态修改
 14) "0"
 15) "maxmemory-samples"  

lru检测的样本数。使用lru或者ttl淘汰算法,从需要淘汰的列表中随机选择sample个key,选出闲置时间最长的key移除。可以动态修改
 16) "5"
 17) "timeout"                   

此参数为设置客户端空闲超过timeout,服务端会断开连接,为0则服务端不会主动断开连接,不能小于0,可以动态修改
 18) "0"
 19) "tcp-keepalive"  

tcp keepalive参数。如果设置不为0,就使用配置tcp的SO_KEEPALIVE值,使用keepalive有两个好处:检测挂掉的对端。降低中间设备出问题而导致网络看似连接却已经与对端端口的问题。在Linux内核中,设置了keepalive,redis会定时给对端发送ack。检测到对端关闭需要两倍的设置值。可以动态修改。
 20) "0"
 21) "auto-aof-rewrite-percentage" 

aof自动重写配置。当aof文件增长到一定大小的时候Redis能够调用 bgrewriteaof 对日志文件进行重写。Redis会记住上次进行些日志后文件的大小。基础大小会同现在的大小进行比较。如果现在的大小比基础大小大制定的百分比,重写功能将启动。同时需要指定一个最小大小用于aof重写,这个用于阻止即使文件很小但是增长幅度很大也去重写aof文件的情况。可以动态设置
 22) "100"
 23) "auto-aof-rewrite-min-size"  

aof自动重写配置。需要同时满足aof文件大小大于auto-aof-rewrite-min-size和增长率大于auto-aof-rewrite-percentage才能重写。可以动态设置
 24) "67108864"
 25) "hash-max-ziplist-entries"  

数据量小于等于hash-max-ziplist-entries的用ziplist,大于hash-max-ziplist-entries用hash。
 26) "512"
 27) "hash-max-ziplist-value"    

value大小小于等于hash-max-ziplist-value的用ziplist,大于hash-max-ziplist-value用hash。
 28) "64"
 29) "list-max-ziplist-entries"      

数据量小于等于list-max-ziplist-entries用ziplist,大于list-max-ziplist-entries用list。
 30) "512"
 31) "list-max-ziplist-value"        

value大小小于等于list-max-ziplist-value的用ziplist,大于list-max-ziplist-value用list。
 32) "64"
 33) "set-max-intset-entries"     

数据量小于等于set-max-intset-entries用iniset,大于set-max-intset-entries用set。
 34) "512"
 35) "zset-max-ziplist-entries"  

数据量小于等于zset-max-ziplist-entries用ziplist,大于zset-max-ziplist-entries用zset。
 36) "128"
 37) "zset-max-ziplist-value"    

value大小小于等于zset-max-ziplist-value用ziplist,大于zset-max-ziplist-value用zset。
 38) "64"
 39) "hll-sparse-max-bytes"     

value大小小于等于hll-sparse-max-bytes使用稀疏数据结构(sparse),大于hll-sparse-max-bytes使用稠密的数据结构(dense)。一个比16000大的value是几乎没用的,建议的value大概为3000。如果对CPU要求不高,对空间要求较高的,建议设置到10000左右。
 40) "3000"
 41) "lua-time-limit"  

如果达到最大时间限制(毫秒),redis会记个log,然后返回error。当一个脚本超过了最大时限。只有SCRIPT KILL和SHUTDOWN NOSAVE可以用。第一个可以杀没有调write命令的东西。要是已经调用了write,只能用第二个命令杀。可以动态修改
 42) "5000"
 43) "slowlog-log-slower-than"     

执行时间比slowlog-log-slower-than大的请求记录到slowlog里面,单位是微秒。可以动态修改。slowlog-max-len生产设置设置大于1024,因为slowlog会省略过多的参数,慢查询不会占用过多的内存;

 44) "10000"
 45) "latency-monitor-threshold"   

延迟监控功能是用来监控redis中执行比较缓慢的一些操作,用LATENCY打印redis实例在跑命令时的耗时图表。只记录大于等于下边设置的值的操作。0的话,就是关闭监视。可以动态修改
 46) "0"
 47) "slowlog-max-len"  

记录slowlog的最大长度,可以动态修改
 48) "128"
 49) "port"                         

redis监听的端口号,不可以动态修改
 50) "6379"
 51) "tcp-backlog"  

在高吞吐环境下,你需要更高的backlog来避免缓慢的客户端连接问题。tcp-backlog可能被Linux内核/proc/sys/net/core/somaxconn的值截断。backlog取的是tcp-backlog和/proc/sys/net/core/somaxconn的更小值。不可以动态修改。
 52) "511"
 53) "databases"   

设置数据库的数量,默认使用的数据库是0。redis的cluster只能使用0号database,如果配置文件中配置了多个database,还是只能用0号,因此,和database选择有关的select命令就不支持了

 54) "16"
 55) "repl-ping-slave-period"  

master给slave发送ping命令的频率,默认是10s发一个ping命令。可以动态修改
 56) "10"
 57) "repl-timeout"  

复制链接超时时间。master和slave都有超时时间的设置。master检测到slave上次发送发送replconf命令的时间超过repl-timeout,即认为slave离线,清除该slave信息。slave检测到上次和master交互的时间超过repl-timeout,则认为master离线。需要注意的是repl-timeout需要设置一个比repl-ping-slave-period更大的值,不然会经常检测到超时。
 58) "60"
 59) "repl-backlog-size" 

复制缓冲区大小,这是一个环形复制缓冲区,用来保存最新复制的命令。这样在slave离线的时候,不需要完全复制master的数据,如果可以执行部分同步,只需要把缓冲区的部分数据复制给slave,就能恢复正常复制状态。缓冲区的大小越大,slave离线的时间可以更长,复制缓冲区只有在有slave连接的时候才分配内存。没有slave的一段时间,内存会被释放出来。可以动态修改。repl-backlog-size是server共享的,建议大于100mb,这样出现网络闪断,或超时复制中断时,Slave较大可能使用“部分同步”,减少全量同步的影响

 60) "1048576"
 61) "repl-backlog-ttl"  

master没有slave一段时间会释放复制缓冲区的内存,repl-backlog-ttl用来设置该时间长度。单位为秒。可以动态修改
 62) "3600"
 63) "maxclients"   

设置能连上redis的最大客户端连接数量。不区分连接是客户端连接还是内部打开文件或者和slave连接等。可以动态修改
 64) "10000"
 65) "watchdog-period"  

Watchdog还是一个实验性功能,开启它可能会对数据产生影响,所以建议在使用时做好数据备份。建议关闭 
 66) "0"
 67) "slave-priority"  

当master不可用,会根据slave的优先级选举一个master。最低的优先级的slave,当选master。而配置成0,永远不会被选举。可以动态修改
 68) "100"
 69) "min-slaves-to-write" 

redis提供了可以让master停止写入的方式,如果配置了min-slaves-to-write,健康的slave的个数小于N,mater就禁止写入。master最少得有多少个good的slave存活才能执行写命令。这个配置虽然不能保证N个slave都一定能接收到master的写操作,但是能避免没有足够good slave的时候,master不能写入来避免数据丢失。可以动态修改
 70) "0"
 71) "min-slaves-max-lag"  

延迟小于min-slaves-max-lag的slave才认为是good slave。可以动态修改
 72) "10"
 73) "hz"    

适当调大hz的值,增大每秒定期删除的次数;建议调整60,官方建议小100。redis定期删除策略:Redis每秒调用10次(hz参数决定)activeExpireCycle函数,每次随机获取20个带有生存时间的键,删除其中已过期的键。适当调大hz的值,增大每秒定期删除的次数;建议调整60,官方建议小100
redis定期删除策略:Redis每秒调用10次(hz参数决定)activeExpireCycle函数,每次随机获取20个带有生存时间的键,删除其中已过期的键。
 74) "10"
 75) "cluster-node-timeout"         #节点超时多久则认为它宕机了。
 76) "15000"
 77) "cluster-migration-barrier"   

一个master可以拥有的最小slave数量。该项的作用是,当一个master没有任何slave的时候,某些有富余slave的master节点,可以自动的分一个slave给它。
 78) "1"
 79) "cluster-slave-validity-factor" 

如果设置成0,则无论从节点与主节点失联多久,从节点都会尝试升级成主节点。如果设置成正数,则cluster-node-timeout乘以cluster-slave-validity-factor得到的时间,是从节点与主节点失联后,此从节点数据有效的最长时间,超过这个时间,从节点不会启动故障迁移。假设cluster-node-timeout=5,cluster-slave-validity-factor=10,则如果从节点跟主节点失联超过50秒,此从节点不能成为主节点。注意,如果此参数配置为非0,将可能出现由于某主节点失联却没有从节点能顶上的情况,从而导致集群不能正常工作,在这种情况下,只有等到原来的主节点重新回归到集群,集群才恢复运作。
 80) "10"
 81) "repl-diskless-sync-delay"  

diskless复制的延迟时间,防止设置为0。一旦复制开始,节点不会再接收新slave的复制请求直到下一个rdb传输。所以最好等待一段时间,等更多的slave连上来。可以动态修改
 82) "5"
 83) "cluster-require-full-coverage" 

只要有节点宕机导致16384个槽没全被覆盖,整个集群就全部停止服务,建议设置为no。
 84) "yes"
 85) "no-appendfsync-on-rewrite"  

在aof重写或者写入rdb文件的时候,会执行大量IO,此时对于everysec和always的aof模式来说,执行fsync会造成阻塞过长时间,no-appendfsync-on-rewrite字段默认设置为no。如果对延迟要求很高的应用,这个字段可以设置为yes,否则还是设置为no,这样对持久化特性来说是更安全的选择。选择no,意味着在子进程save的时候,fsync的策略相当于no。Linux的默认fsync策略是30秒。可能丢失30秒数据。可以动态修改
 86) "no"
 87) "slave-serve-stale-data"  

当从库同主机失去连接或者复制正在进行,从机库有两种运行方式:

如果slave-serve-stale-data设置为yes(默认设置),从库会继续响应客户端的请求。

如果slave-serve-stale-data设置为no,除去INFO和SLAVOF命令之外的任何请求都会返回一个错误"SYNC with master in progress"。可以动态修改
 88) "yes"
 89) "slave-read-only"  

slave是否只读,默认slave是只读的。可以动态修改
 90) "yes"
 91) "stop-writes-on-bgsave-error"  

当RDB持久化出现错误后,是否依然进行继续进行工作,yes:不能进行工作,no:可以继续进行工作,可以动态修改
 92) "yes"
 93) "daemonize"   

redis是否后台运行,不可以动态修改。建议修改为yes
 94) "no"
 95) "rdbcompression"  

使用压缩rdb文件,rdb文件压缩使用LZF压缩算法,yes:压缩,但是需要一些cpu的消耗。no:不压缩,需要更多的磁盘空间。可以动态修改
 96) "yes"
 97) "rdbchecksum"     

是否校验rdb文件。从rdb格式的第五个版本开始,在rdb文件的末尾会带上CRC64的校验和。这跟有利于文件的容错性,但是在保存rdb文件的时候,会有大概10%的性能损耗,所以如果你追求高性能,可以关闭该配置。不可以动态修改
 98) "yes"
 99) "activerehashing" 

Redis将在每100毫秒时使用1毫秒的CPU时间来对redis的hash表进行重新hash,可以降低内存的使用。当你的使用场景中,有非常严格的实时性需要,不能够接受Redis时不时的对请求有2毫秒的延迟的话,把这项配置为no。如果没有这么严格的实时性要求,可以设置为yes,以便能够尽可能快的释放内存。
100) "yes"
101) "repl-disable-tcp-nodelay" 

是否禁止复制tcp链接的tcp nodelay参数,可选择yes或者no。默认是no,即使用tcp nodelay。如果master设置了yes来禁止tcp nodelay设置,在把数据复制给slave的时候,会减少包的数量和更小的网络带宽。但是这也可能带来数据的延迟。默认我们推荐更小的延迟,但是在数据量传输很大的场景下,建议选择yes。可以动态修改
102) "no"
103) "repl-diskless-sync"  

是否使用socket方式复制数据。目前redis复制提供两种方式,disk和socket。socket方式目前还处于实验阶段。如果新的slave连上来或者重连的slave无法部分同步,就会执行全量同步,master会生成rdb文件,disk方式是master创建一个新的进程把rdb文件保存到磁盘,再把磁盘上的rdb文件传递给slave。socket是master创建一个新的进程,直接把rdb文件以socket的方式发给slave。dis方式的时候,当一个rdb保存的过程中,多个slave都能共享这个rdb文件。socket的方式就的一个个slave顺序复制。在磁盘速度缓慢,网速快的情况下推荐用socket方式。可以动态修改
104) "no"
105) "aof-rewrite-incremental-fsync"  

在aof重写的时候,如果打开了aof-rewrite-incremental-fsync开关,系统会每32MB执行一次fsync。这对于把文件写入磁盘是有帮助的,可以避免过大的延迟峰值。
106) "yes"
107) "aof-load-truncated"  

redis在启动的时候可以加载被截断的AOF文件,默认启用。可以动态修改
108) "yes"
109) "appendonly"   

默认redis使用的是rdb方式持久化,这种方式在许多应用中已经足够用了。但是redis如果中途宕机,会导致可能有几分钟的数据丢失,根据save来策略进行持久化,Append Only File是另一种持久化方式,可以提供更好的持久化特性。Redis会把每次写入的数据在接收后都写入 appendonly.aof 文件,每次启动时Redis都会先把这个文件的数据读入内存里,先忽略RDB文件。可以动态修改
110) "no"
111) "dir"   

数据目录,数据库的写入会在这个目录。rdb、aof文件也会写在这个目录。可以动态修改
112) "./"
113) "maxmemory-policy"  

内存容量超过maxmemory后的处理策略。
volatile-lru:利用LRU算法移除设置过过期时间的key。
volatile-random:随机移除设置过过期时间的key。
volatile-ttl:移除即将过期的key,根据最近过期时间来删除(辅以TTL)。
allkeys-lru:利用LRU算法移除任何key。
allkeys-random:随机移除任何key。
noeviction:不移除任何key,只是返回一个写错误。
114) "noeviction"
115) "appendfsync"  

aof持久化策略的配置
no表示不执行fsync,由操作系统保证数据同步到磁盘,速度最快。
always表示每次写入都执行fsync,以保证数据同步到磁盘。
everysec表示每秒执行一次fsync,可能会导致丢失这1s数据。可以动态修改
116) "everysec"
117) "save"   

该命令可以把内存的数据保存到硬盘。只要满足在指定的seconds内,写入命令个数大于changes,就会执行保存操作。比如900秒内至少1个key值改变(则进行数据库保存--持久化),可以动态修改
118) "900 1 300 10 60 10000"
119) "loglevel"  

指定了服务端日志的级别。包括:debug(很多信息,方便开发、测试),verbose(许多有用的信息,但是没有debug级别信息多),notice(适当的日志级别,适合生产环境),warn(只有非常重要的信息),可以动态修改。
120) "notice"
121) "client-output-buffer-limit"  
对客户端输出缓冲进行限制可以强迫那些不从服务器读取数据的客户端断开连接,用来强制关闭传输缓慢的客户端。
对于normal client,第一个0表示取消hard limit,第二个0和第三个0表示取消soft limit,normal client默认取消限制,因为如果没有寻问,他们是不会接收数据的。
client-output-buffer-limit normal 0 0 0
对于slave client和MONITER client,如果client-output-buffer一旦超过256mb,又或者超过64mb持续60秒,那么服务器就会立即断开客户端连接。
client-output-buffer-limit slave 256mb 64mb 60
对于pubsub client,如果client-output-buffer一旦超过32mb,又或者超过8mb持续60秒,那么服务器就会立即断开客户端连接。
client-output-buffer-limit pubsub 32mb 8mb 60
122) "normal 0 0 0 slave 268435456 67108864 60 pubsub 33554432 8388608 60"
123) "unixsocketperm"  

配置unix socket使用文件的权限,不可以动态修改
124) "0"
125) "slaveof"                

slave复制对应的master。可以动态修改
126) ""
127) "notify-keyspace-events"  

键空间通知使得客户端可以通过订阅频道或模式,来接收那些以某种方式改动了 Redis 数据集的事件。因为开启键空间通知功能需要消耗一些 CPU ,所以在默认配置下,该功能处于关闭状态。notify-keyspace-events 的参数可以是以下字符的任意组合,它指定了服务器该发送哪些类型的通知:字符 发送的通知
128) ""
129) "bind"          

指定redis只接收来自于该IP地址的请求,如果不进行设置,则监听所有网络地址过来的连接,不可以动态修改
130) ""