在《Redis:简介与安装》中我们介绍了如何在Linux服务器上安装Redis,其中在Redis的解压目录下有个很重要的配置文件redis.conf
不知道大家是否还有印象。
在实际使用Redis的过程中,很多功能的配置都是在此文件中完成的。我们今天的重点就是说说这个配置文件里都有些什么。
1. 开头说明
开头部分主要描述了这个文件是干嘛的,以及Redis必须通过向redis-server
传入该配置文件的路径才能启动。比如:./redis-server /path/to/redis.conf
。紧接着还给出提示若我们需要使用内存大小时,可以指定单位,通常是以k、gb、m的形式出现,并且这些单位是不区分大小写的。
2. INCLUDES
我们知道Redis只有一个配置文件,但如果是多个人进行开发维护,那么就需要多个这样的配置文件。Redis针对这种场景,提供了include
关键字将其他配置文件引入进来,比如:include /path/to/local.conf
。
需要注意的是:如果将include
写在redis.conf
文件的最开始,那么后面的配置会覆盖引入文件的配置,即redis.conf
的配置优先级是更高的。但如果想以引入文件的配置作为最终生效的配置,那么需要将include
配置写在redis.conf
文件的末尾。
3. MODULES
模块扩展功能是在redis4.0上新增出来的,我们通过这里的loadmodule
配置引入自定义模块来新增一些功能。比如新增一种数据类型。
4. NETWORK
注意:该段配置较长,截图只是部分内容,完整内容参考redis.conf
。
(1)bind
:用于绑定redis服务器网卡IP,默认为127.0.0.1,只能通过本机的客户端连接redis服务,而无法通过远程连接。如果允许远程连接,则可以将该配置项设置为空。
(2)port
:设置redis进程的端口号,默认是6379。
(3)timeout
:设置客户端连接的超时时间,单位为秒。当客户端在这段时间内没有发出任何指令,那么关闭该连接。默认值为0,表示不关闭。
(4)tcp-keepalive
:周期性的检查客户端是否处于健康状态,避免服务器一直阻塞,单位为秒。默认为300,如果设置为0,则不会周期性的检测。
(5)protected-mode
:该配置项设置外部网络连接redis服务,设置方式如下:
- 关闭protected-mode模式,此时外部网络可以直接访问。
- 开启protected-mode保护模式,需配置bind ip或者设置访问密码。
5. GENERAL
(1)daemonize
:设置redis是否在后台启动,默认值为 no。
(2)pidfile
:设置PID文件路径,当redis作为守护进程启动时,它会把pid默认写到/var/run/redis_6379.pid
文件里面。
(3)loglevel
:定义日志级别。默认值为notice,可选值有以下4种:
- debug(记录大量日志信息,适用于开发、测试阶段)
- verbose(较多日志信息)
- notice(适量日志信息,适用于生产环境)
- warning(仅记录部分重要、关键信息)
(4)logfile
:配置log文件地址,默认打印在命令行终端的窗口上。
(5)databases
:设置数据库的数量,默认为16。默认为第0个数据库,客户端可通过select
命令选择一个数据库。
6. SNAPSHOTTING
(1)save
:设置触发RDB方式的持久化条件,默认如下配置:
save 900 1:表示900 秒内如果至少有 1 个 key 的值变化,则保存
save 300 10:表示300 秒内如果至少有 10 个 key 的值变化,则保存
save 60 10000:表示60 秒内如果至少有 10000 个 key 的值变化,则保存
如果我们只是使用Redis的缓存功能,不需要对数据进行持久化,那么可以注释掉所有的 save 行来停用持久化功能。
(2)stop-writes-on-bgsave-error
:默认值为yes。当启用了RDB并且最后一次保存数据失败时,Redis是否停止写入数据。
(3)rdbcompression
:默认值是yes。用于表示持久化时,写入磁盘的快照文件是否需要压缩处理。
(4)rdbchecksum
:默认值是yes。在存储快照后,我们还可以让redis进行数据校验,但这样做会增加更多的性能消耗,如果希望获取到最大的性能提升,可以关闭此功能。
(5)dbfilename
:设置快照的文件名,默认是dump.rdb
。
(6)dir
:设置快照文件的存放路径。
7. REPLICATION
(1)replica-serve-stale-data
:默认值为yes。当从节点与主节点断开连接,或者正在同步数据时,从节点可能会有两种表现:
- 如果为yes,从节点可以继续响应客户端请求,但返回的数据可能是过时的。
- 如果为no,从节点在以上情况不再响应客户端请求,此时会返回"SYNC with master in progress" 的错误。
(2)replica-read-only
:配置Redis的从节点是否只读,默认值为yes。
(3)repl-diskless-sync
:主从数据复制是否使用无硬盘复制功能,默认值为no。
8. SECURITY
(1)rename-command
:命令重命名,通常用于将一些重要命令重命名,从而起到安全保护的作用。例如:
- flushdb(清空数据库)
- flushall(清空所有记录)
- config(客户端连接后可配置服务器)
- keys(客户端连接后可查看所有存在的键)
可通过rename-command FLUSHALL ""
禁用命令,也可以保留命令但是不能轻易使用,如:rename-command FLUSHALL abcdefg
。这样的话,重启服务器后则需要使用新命令来执行,否则服务器会报错unknown command。
(2)requirepass
:设置redis的连接密码,比如:requirepass 123
。
9. CLIENTS
(1)maxclients
:设置客户端最大并发连接数,默认无限制。如果设置maxclients为0,表示不作限制。当客户端连接数到达限制时,Redis会关闭新的连接并向客户端返回max number of clients reached错误信息。
10. MEMORY MANAGEMENT
(1)maxmemory
:设置Redis的最大内存,如果设置为0,表示不作限制。该配置项通常是配合下面介绍的maxmemory-policy
参数一起使用。
(2)maxmemory-policy
:当内存使用达到maxmemory
设置的最大值时,redis使用的内存清除策略。有以下几种可以选择:
-
volatile-lru
:使用LRU算法移除即将过期的key,只针对设置了过期时间的key。 -
allkeys-lru
:使用LRU算法移除即将过期的key。 -
volatile-random
:随机移除即将过期的key,只针对设置了过期时间的key。 -
allkeys-random
:随机移除即将过期的key。 -
volatile-ttl
:移除即将过期的key。 -
noeviction
:不移除任何key,直接返回一个写错误,默认选项。
(3)replica-ignore-maxmemory
:默认值为yes,是否忽略从节点的内存限制。
11. APPEND ONLY MODE
(1)appendonly
:默认情况下redis使用的是RDB方式持久化,这种方式在许多场景中已经足够用了。但是这种方式可能会导致可能有几分钟的数据丢失,而AOF是另一种持久化方式, 可以提供更好的持久化特性。Redis会把写命令都写入appendonly.aof
文件,如果启动AOF,每次启动时,Redis都会先把这个文件的数据读入内存里,而忽略RDB文件。默认值为no。
(2)appendfilename
:aof文件名,默认是appendonly.aof
。
(3)appendfsync
:aof持久化策略的配置,默认值为everysec
。
-
no
:表示不执行fsync,由操作系统保证数据同步到磁盘,速度最快; -
always
:表示每次写入都执行fsync,以保证数据同步到磁盘; -
everysec
:表示每秒执行一次fsync,可能会导致丢失这1s数据。
(4)no-appendfsync-on-rewrite
:在aof重写或者写入rdb文件的时候,会执行大量IO,此时对于everysec和always的aof模式来说,执行fsync会造成阻塞过长时间,no-appendfsync-on-rewrite
字段设置为默认设置为no。如果对延迟要求很高的应用,这个字段可以设置为yes,这样对持久化特性来说这是更安全的选择。设置为yes表示rewrite期间对新写操作不fsync,暂时存在内存中,等rewrite完成后再写入,默认为no,建议yes。Linux的默认fsync策略是30秒,可能丢失30秒数据。
(5)auto-aof-rewrite-percentage
:默认值为100。aof自动重写配置,当目前aof文件大小超过上一次重写的aof文件大小的百分之多少进行重写,即当aof文件增长到一定大小的时候,Redis能够调用bgrewriteaof对日志文件进行重写。这样做的目的是压缩aof文件,当前AOF文件大小是上次日志重写得到AOF文件大小的二倍(设置为100)时,自动启动新的日志重写过程。
(6)auto-aof-rewrite-min-size
:64mb。设置允许重写的最小aof文件大小,避免了达到约定百分比但尺寸仍然很小的情况还要重写。
12. LUA SCRIPTING
(1)lua-time-limit
:一个lua脚本执行的最大时间,单位为ms。默认值为5000。
13. REDIS CLUSTER
(1)cluster-enabled
:是否启用集群,默认是不开启集群模式。
(2)cluster-config-file
:集群配置文件的名称,每个节点都有一个集群相关的配置文件,持久化保存集群的信息。 这个文件并不需要手动配置,这个配置文件有Redis生成并更新,每个Redis集群节点需要一个单独的配置文件。需要确保与实例运行的系统中配置文件名称不冲突,默认配置为nodes-6379.conf
。
(3)cluster-node-timeout
:可以配置值为15000。节点互连超时的阀值,集群节点超时毫秒数。
(4)cluster-slave-validity-factor
:可以配置值为10。在进行故障转移的时候,全部从节点都会请求申请为主节点,但是有些从节点可能与主节点断开连接一段时间了, 导致数据过于陈旧,这样的从节点不应该被提升为主节点。该参数就是用来判断从节点与主节点断开的时间是否过长,判断方法是:比较从节点断开连接的时间和(node-timeout * slave-validity-factor) + repl-ping-slave-period
。如果节点超时时间为三十秒, 并且slave-validity-factor为10,假设默认的repl-ping-slave-period是10秒,即如果超过310秒slave将不会尝试进行故障转移。
(5)cluster-require-full-coverage
:默认情况下,集群全部的slot必须是有节点负责,集群状态才为ok,才能对外提供服务。若该配置设置为no,可以在slot没有全部分配的时候提供服务。通常情况下不建议打开该配置,这样会造成分区的时候,小分区的主节点一直在接受写请求,从而造成很长时间数据不一致。