对于任何一个服务来说,配置文件都是使用服务不可不了解的文件,Redis的配置文件位于Redis安装目录下,文件名为redis.conf,Windows的配置文件名为redis.windows.conf,Redis的很多功能的实现都需要修改配置文件里的参数,这里就对配置文件里的一些常用配置做一个简单的介绍,redis.conf文件从上到下跟着分隔符依次介绍。
1.文件开头
这段没什么解释的,当需要内存大小时,可以指定单位,通常是以 k,gb,m的形式出现,并且单位不区分大小写。
2.INCLUDES
这段主要是说在redis.conf文件里可以引入其他位置的文件,就比如nginx的配置文件nginx.conf末尾一般都会有include /etc/nginx/conf.d/*.conf,意思是加载conf.d目录下的所有后缀为.conf的文件。Redis也可以用这种方式引用文件,这样做的好处是如果有多人开发维护,每个人的配置内容可能不相同,全部都在redis.conf里操作会显得混乱,把每个人自己的配置文件定义好放到指定目录下,redis.conf统一引入就行了。注意include的位置,不能放在redis.conf的开头,开头是先引入配置文件,如果文件里有和redis.conf里相同的参数,redis.conf里会覆盖引入的文件里内容,所以一般都放在redis.conf文件的末尾。
3.GENERAL
这部分主要是对redis的端口,连接权限,日志记录几部分的配置,具体参数解释如下:
-
daemonize
设置为yes表示指定Redis以守护进程的方式启动(后台启动),默认值为no,Windows不支持守护进程方式,所以redis.windows.conf里设置为no。 -
pidfile
当以守护进程方式启动时候,Redis把pid写入到该参数设置的路径下文件里。 -
port
Redis端口,默认6379,可修改参数值指定端口。 -
tcp-backlog
该参数确定了TCP连接中已完成队列(完成三次握手之后)的长度, 此值必须不大于Linux系统定义的/proc/sys/net/core/somaxconn值,默认是511。 -
bind
Redis默认监听127.0.0.1,如果不设置该参数,远程无法连接到redis,一般修改为redis服务器IP,如果允许任何客户端连接,设置为0.0.0.0。 -
timeout
该参数是客户端空闲多久时间关闭连接,值为0代表不关闭连接。 -
loglevel
该参数定义日志级别。默认值为notice,可设置值有四种:debug,verbose,notice,warning。 -
logfile
该参数指定log文件地址,默认打印在命令行终端的窗口上。 -
databases
指定数据库的数目。默认的数据库是DB0 ,可以在每个连接上使用select命令选择一个不同的数据库,dbid是一个介于0到databases - 1 之间的数值。默认值是16,也就是说默认Redis有16个数据库,一般不修改。
4.SNAPSHOTTING
这部分主要是数据持久化相关配置,具体参数解释如下:
-
save
该参数是用来设置触发Redis的持久化(rbd方式)条件,也就是什么时候将内存中的数据保存到硬盘。上图中的参数值是Redis的默认值,三组参数值,只要其中任何一个满足,都会触发备份,触发条件依次是:900秒内如果至少有1个key的值变化,300秒内如果至少有10个key的值变化,60秒内如果至少有10000个key的值变化。如果不想触发备份,将save参数设置为空即可。 -
stop-writes-on-bgsave-error
该参数设置rdb文件保存失败时如何处理,默认值为yes。当启用了RDB方式备份且最后一次后台保存数据失败,Redis是否停止接收数据,这会让用户意识到数据没有正确持久化到磁盘上。如果Redis重启了,那么又可以重新开始接收数据了。 -
rdbcompression
该参数是配置存到磁盘中的快照是否开启压缩存储,默认值是yes。如果是的话,redis会采用LZF算法进行压缩。如果你不想消耗CPU来进行压缩的话,可以设置为关闭此功能,但是存储在磁盘上的快照会比较大。 -
rdbchecksum
该参数设置数据校验,默认值是yes。存储快照后,我们还可以让redis使用CRC64算法来进行数据校验,但是这样做会增加大约10%的性能消耗,如果希望获取到最大的性能提升,可以关闭此功能。 -
dbfilename
该参数设置保存的快照的文件名,默认是dump.rdb。 -
dir
该参数设置保存的快照的路径,默认是在redis安装目录下。
5.REPLICATION
这部分主要是Redis主从数据复制相关配置,具体参数解释如下:
-
slaveof
该参数指定主库master的ip和端口,默认注释掉的,即不属于任何库的从库。开启配置参数后,就会从指定主库同步数据。 -
masterauth
该参数设置主从复制时候连接主库的密码。如果主库设置了密码,则需配置此参数。 -
slave-serve-stale-data
该参数设置与主库失去连接时的处理,默认值为yes。当一个 slave 与 master 失去联系,或者复制正在进行的时候,slave可能会有两种表现:
(1)如果为yes,slave仍然会应答客户端请求,但返回的数据可能是过时,或者数据可能是空的在第一次同步的时候。
(2)如果为no,在你执行命令时,slave都将返回一个"SYNC with master in progress 的错误。 -
slave-read-only
该参数配置Redis的Slave实例是否接受写操作,即Slave是否为只读Redis。默认值为yes。 -
repl-diskless-sync
主从数据复制是否使用无硬盘复制功能。默认值为no。 -
repl-diskless-sync-delay
当启用无硬盘备份,服务器等待一段时间后才会通过套接字向从站传送RDB文件,这个等待时间是可配置的。这一点很重要,因为一旦传送开始,就不可能再为一个新到达的从站服务。从站则要排队等待下一次RDB传送。因此服务器等待一段 时间以期更多的从站到达。延迟时间以秒为单位,默认为5秒。要关掉这一功能,只需将它设置为0秒,传送会立即启动。默认值为5。 -
repl-disable-tcp-nodelay
同步之后是否禁用从站上的TCP_NODELAY 如果你选择yes,redis会使用较少量的TCP包和带宽向从站发送数据。但这会导致在从站增加一点数据的延时。Linux内核默认配置情况下最多40毫秒的延时。如果选择no,从站的数据延时不会那么多,但备份需要的带宽相对较多。默认情况下我们将潜在因素优化,但在高负载情况下或者在主从站都跳的情况下,把它切换为yes是个好主意。默认值为no。 -
slave-priority
该参数设置slave的优先级,主要用于哨兵模式,对master的选取时使用,优先级数字小的salve会优先考虑提升为master。
6.SECURITY
这部分主要是Redis安全相关的配置,具体参数解释如下:
-
requirepass
该参数设置redis的连接密码,默认注释掉即不需要密码,设置后,连接redis需要使用该参数值。 -
rename-command
该参数重命名redis命令,有些命令执行后影响很大,比如flushdb(清空当前库数据),flushall(清空所有库数据),config set(修改配置参数),要禁用这些命令,重命名为空即可,例如rename-command flushall "",如果要保留命令,可以修改命令名称,例如rename-command flushall abc,重启后,执行flushall会报错,执行abc会成功。
7.LIMITS
这部分主要是Redis客户端的连接限制配置,具体参数解释如下:
-
maxclients
该参数设置置客户端最大并发连接数,默认无限制,Redis可以同时打开的客户端连接数为Redis进程可以打开的最大文件数,如果参数设置为0,表示不作限制,如果指定值,当客户端连接数到达限制时,Redis会关闭新的连接并向客户端返回max number of clients reached错误信息。 -
maxmemory
该参数设置分配给redis的最大内存,设置为0表示无限制。
8.APPEND ONLY MODE
这部分是Redis采用AOF方式持久化相关配置,具体参数解释如下:
-
appendonly
该参数配置是否开启AOF持久化,默认为no。redis持久化有rdb和aof两种方式,默认开启的是rdb,rdb采用磁盘快照方式备份,根据save来触发,如果redis如果中途宕机,会导致可能有几分钟的数据丢失,Append Only File是另一种持久化方式,可以提供更好的持久化特性。Redis会把每次写入数据的命令都写入appendonly.aof文件,每次启动时Redis都会先把这个文件的命令执行一边,先忽略RDB文件。 -
appendfilename
该参数设置aof文件名,默认为appendonly.aof。 -
appendfsync
aof持久化策略的配置;no表示不执行fsync,由操作系统保证数据同步到磁盘,速度最快;always表示每次写入都执行fsync,以保证数据同步到磁盘;everysec表示每秒执行一次fsync,可能会导致丢失这1s数据。 -
no-appendfsync-on-rewrite
在aof重写或者写入rdb文件的时候,会执行大量IO,此时对于everysec和always的aof模式来说,执行fsync会造成阻塞过长时间,no-appendfsync-on-rewrite字段设置为默认设置为no。如果对延迟要求很高的应用,这个字段可以设置为yes,否则还是设置为no,这样对持久化特性来说这是更安全的选择。设置为yes表示rewrite期间对新写操作不fsync,暂时存在内存中,等rewrite完成后再写入,默认为no,建议yes。Linux的默认fsync策略是30秒。 -
auto-aof-rewrite-percentage
aof自动重写配置,当目前aof文件大小超过上一次重写的aof文件大小的百分之多少进行重写,即当aof文件增长到一定大小的时候,Redis能够调用bgrewriteaof对日志文件进行重写。当前AOF文件大小是上次日志重写得到AOF文件大小的二倍(设置为100)时,自动启动新的日志重写过程,默认值为100。 -
auto-aof-rewrite-min-size
设置允许重写的最小aof文件大小,避免了达到约定百分比但尺寸仍然很小的情况还要重写。 -
aof-load-truncated
aof文件可能在尾部是不完整的,当redis启动的时候,aof文件的数据被载入内存。重启可能发生在redis所在的主机操作系统宕机后,尤其在ext4文件系统没有加上data=ordered选项,出现这种现象,redis宕机或者异常终止不会造成尾部不完整现象,可以选择让redis退出,或者导入尽可能多的数据。如果选择的是yes,当截断的aof文件被导入的时候,会自动发布一个log给客户端然后load。如果是no,用户必须手动redis-check-aof修复AOF文件才可以。默认值为yes。
9.LUA SCRIPTING
- lua-time-limit
一个lua脚本执行的最大时间,默认值为5000,单位为ms,一般不需改动。
10.REDIS CLUSTER
这部分是Redis集群相关配置,具体参数解释如下:
-
cluster-enabled
该参数设置是否开启集群,默认为关闭。 -
cluster-config-file
集群配置文件的名称,每个节点都有一个集群相关的配置文件,持久化保存集群的信息。这个文件并不需要手动配置,这个配置文件有Redis生成并更新,每个Redis集群节点需要一个单独的配置文件。请确保与实例运行的系统中配置文件名称不冲突。默认配置为nodes-6379.conf。 -
cluster-node-timeout
该参数设置集群节点连接时超时时间,单位为毫秒。 -
cluster-slave-validity-factor
默认值为10。在进行故障转移的时候,全部slave都会请求申请为master,但是有些slave可能与master断开连接一段时间了, 导致数据过于陈旧,这样的slave不应该被提升为master。该参数就是用来判断slave节点与master断线的时间是否过长。判断方法是:比较slave断开连接的时间和(node-timeout * slave-validity-factor) + repl-ping-slave-period,如果节点超时时间为三十秒, 并且slave-validity-factor为10,假设默认的repl-ping-slave-period是10秒,即如果超过310秒slave将不会尝试进行故障转移。 -
cluster-migration-barrier
默认值为1。master的slave数量大于该值,slave才能迁移到其他孤立master上,如这个参数若被设为2,那么只有当一个主节点拥有2 个可工作的从节点时,它的一个从节点会尝试迁移。 -
cluster-require-full-coverage
默认情况下,集群全部的slot有节点负责,集群状态才为ok,才能提供服务。设置为no,可以在slot没有全部分配的时候提供服务。不建议打开该配置,这样会造成分区的时候,小分区的master一直在接受写请求,而造成很长时间数据不一致。
11.SLOW LOG
这部分是Redis慢日志相关配置,具体参数解释如下:
-
slowlog-log-slower-than
该参数定义慢日志的划定界限,只有query执行时间大于slowlog-log-slower-than的才会定义成慢查询,才会被slowlog进行记录。slowlog-log-slower-than设置的单位是微妙,默认是10000微妙,也就是10ms。 -
slowlog-max-len
该参数表示慢查询最大的条数,当slowlog超过设定的最大值后,会将最早的slowlog删除,是个FIFO队列。
配置文件每部分的参数简单介绍了下,具体的参数怎样配置使用,还是得根据自己的需求去配置。各位如果觉得还有点意义,烦请点一下推荐,加个关注,互相交流。