Redis配置文件redis.conf详解

Redis脚本简介

在我们介绍Redis的配置文件之前,我们先来说一下Redis安装完成后生成的几个可执行文件: redis-server 、redis-cli 、redis-benchmark 、redis-stat 、redis-check-dump、redis-check-aof :

redis-server:Redis服务器的daemon启动程序。

redis-cli:Redis命令行执行工具。当然,你也可以用telnet根据其纯文本协议来操作。

redis-benchmark:Redis性能检测工具,测试Redis在你的系统及你的配置下的读写性能。

redis-stat:Redis态检测工具,可以检测 Redis 当前状态参数及延迟状况(高版本的Redis将没有这个脚本)。

redis-check-dump:Redis dump 数据文件的修复工具。

redis-check-aof:Redis aof 日志文件修复工具。

Redis配置文件详解

开头说明

开头说明中主要就是要注意在redis中内存大小写kkb是不一样的,前者是1000的倍数,后者超时1024的倍数。

INCLUDES

       INCLUDES的作用就是把其他关于redis的配置文件引入到redis.conf文件中使其生效,redis.conf就作为一个总闸一样,配置的方法是使用include来引入一个路径下配置文件(比如:include /path/aaa/other.conf)。        需要注意的是,如果将此配置写在redis.conf 文件的开头,那么后面的配置会覆盖引入文件的配置,如果想以引入文件的配置为主,那么需要将 include 配置写在 redis.conf 文件的末尾。

MODULES

这个部分是用来引入自定义的模块的。通过这里的 `loadmodule` 配置将引入自定义模块来新增一些功能。

NETWORK

  • bind: 绑定redis服务器网卡IP,默认为127.0.0.1,即本地回环地址。这样的话访问redis服务只能通过本机的客户端连接,而无法通过远程连接。如果bind被注掉了或者为空时会接收所有来自于可用网络的连接。
  • port: 指定redis运行的端口,默认的是6379。由于redis是单线程模型,因此单机开多个redis运行的时候会修改端口,除此而外一般保持默认的即可。
  • protected-mode:是否开启保护模式,默认是yes表示开启保护模式
  • timeout:设置客户端连接时的超时时间,单位:秒。当客户端在这段时间没有任何操作(空闲的),那么就会关闭连接。默认为0,表示永不关闭。
  • tcp-backlog: 此参数确定了TCP连接中已完成的队列长度,这个值必须不能大于Linux系统中定义的/proc/sys/net/core/somaxconn值,默认是511。
  • tcp-keepalive:表示将周期性的使用SO_KEEPALIVE检测客户端是否还处于健康状态,避免服务器一直阻塞,官方默认是300s,如果设置为0,表示不周期性检测。

GENERAL

  • daemonize:设置为yes表示指定Redis以守护进程的方式启动(后台启动)。默认为no
  • pidfile:配置pid文件路径,当Redis作为守护进程运行的时候,会把pid默认写到/var/redis/run/redis_6379.pid 文件里面
  • loglevel:定义日志级别。默认为notice。Redis中有4中日志级别:
    • debug :记录详细的日志,使用与开发、测试阶段
    • varbose:较多的日志
    • notice:适量的日志信息,适用于生产环境
    • warning:仅有部分重要、关键的才会被记录
  • logfile:配置日志文件默认存放的位置,默认会直接打印在终端的屏幕上
  • databases:设置数据库的数目。默认的数据库是DB0,有16个,可以使用select <dbid>命令选择不同的数据库。
  • always-show-logo:是否在启动的时候显示Redis的logo,默认为yes,即显示logo。

SNAPSHOTTING

Snapshotting:快照。主要是用来配置持久化策略的。
  • save:用来配置触发Redis的做持久化的条件,也就是什么时候将内存中的数据保存到硬盘中。默认配置如下: * save 900 1:表示900s内如果有1个key变化,到时间(900s)后就把这段时间内的变化保存到磁盘 * save 300 10 表示300s内如果有10个key变化,到时间(300s)后就把这段时间内的变化保存到磁盘 * save 60 10000 表示60s内如果有10000个key变化,到时间(60s)后就把这段时间内的变化保存到磁盘

    当然如果只是使用Redis的缓存功能,不需要持久化,那么可以把这些save注释掉,然后使用一个空字符串实现停用:save ""

  • stop-writes-on-bgsave-error:当启用了RDB且最火一次后台保存数据失败,Redsi是否停止接收数据。默认值为yes,这会让用户意识到数据没有正确持久化到硬盘上,从而可以排错,否者没有人会注意到灾难发生了。

  • rdbcompression:对于存储到磁盘中的快照,可以设置时候惊进行压缩存储。默认值是yes,redis会使用LZF算法进行压缩。但是压缩会带来一定的CPU消耗,如果关闭后存储在磁盘上的快照将会非常大。
  • rdbchecksum:在存储快照后,我们还可以让Redis使用CRC64算法来进行数据校验。默认是yes,这样会带来10%的性能消耗。
  • dbfilename:设置快照的文件名,默认名字是dump.rdb
  • dir:设置快照文件的存放路径,这个配置项必须自定的是一个目录,而不能是一个文件名。保存的是上面dbfilename,默认保存到当前目录下。

REPLICATION

  • slave-serve-stale-data:当一个slave和一个master失去联系,或者复正在进行的时候,slave可能会有两种表现: * 如果是yes,slave任然会应答客户端请求,但是返回的数据是过时的。 * 如果是no,在执行除了info he salvaof之外的其他命令时,slave都将返回一个“SYNC with master in progress”错误
  • slave-read-only:配置Redis的Slave示例是否接受写操作,即Slave是否为只读Redis。默认值是yes,Slave为只读。
  • repl-diskless-sync:主从复制是否使用无硬盘复制功能。默认值为no。
  • repl-disless-sync-delay:当启用无硬盘备份,服务器等待一段时间后才会通过套接字向从站传送RDB文件,这个等待时间是可配置的。 这一点很重要,因为一旦传送开始,就不可能再为一个新到达的从站服务。从站则要排队等待下一次RDB传送。因此服务器等待一段 时间以期更多的从站到达。延迟时间以秒为单位,默认为5秒。要关掉这一功能,只需将它设置为0秒,传送会立即启动。默认值为5。
  • repl-disalbe-tcp-nodelay:同步之后是否禁用从站上TCP_NODELAY。如果yes,表示redis会使用较少的TCP包和带宽向从站发送数据。但是这回导致从站增加数据延时;如果选择no,从站的数据延时不会那么多,但备份需要的带宽相对较多。Redis默认设置是no。

SECURITY

  • rename-command:从命名命令。例如对于一些危险的命令: * flushdb :清空当前数据库 * flushall:清空所有数据库 * config:客户端连接后可配置服务器 * keys:查看数据库中所有的键
    • requirepass:设置Redis连接密码,如果配置了连接密码,客户端在连接Redis的时候需要通过auth <password>命令来验证。默认是关闭的。

作为服务端redis-server,常常需要禁用以上命令来使得服务器更加安全,禁用的具体做法是:(比如禁用FLUSHALL命令): * rename-command FLUSHALL ""

也可以保留这个命令但是把它重命名,一般人没有权限使用: * rename-command FLUSHALL sfr443g432

这样,重启服务器后则需要使用新命令来执行操作,否则服务器会报错unknown command。

CLIENTS

  • maxclients:设置客户端最大的连接数,默认是10000个连接。当客户端连接数到达限制是,Redis会关闭新的连接并向客户端返回max number of clients reached错误信息。如果设置为0,表示不作限制。

MEMORY MANAGEMENT

  • maxmemory:指定Redis最大内存限制,Redis在启动时会把数据加载到内存中,达到最大内存后,Redis会先尝试清除已到期或即将到期的Key,当此方法处理 后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。Redis新的vm机制,会把Key存放内存,Value会存放在swap区
  • maxmemory-policy:当内存使用达到最大值时,redis应该采用的内存清理策略。有以下几种可以选择:
    • volatile-lru:从所有配置了过期时间的键中移除最近很少使用的键
    • allkeys-lru:从所有键中移除任何最近很少使用过的键
    • volatile-lfu:从所有配置了过期时间的键中驱逐使用频率最少的键
    • allkeys-lfu: 从所有键中驱逐使用频率最少的键
    • volatile-random:随机移除设置了过期时间的key
    • allkeys-random:随机移除任何key
    • volatile-ttl:移除距过期时间最近的key
    • noeviction:不移除任何key,仅仅返回写错误,默认值。

APPEND ONLY MODE

  • appendonly:默认redis使用的是RDB方式持久化,这种方式在许多应用中已经足够用了。但是对于数据一致性要求很高的应用,如果还是只使用RDB,一旦redis宕机,会导致可能有几分钟的数据丢失,这种场景下就需要使用AOF(另一种持久化方式),可以提供更好的持久化特性以及更高的数据一致性。将appendonly置为yes开启AOF,Redis将会把每次写入的数据在接收后都写入appendonly.aof文件(默认的文件名),每次启动的时候会优先加载appendonly.aof这个文件到内存中。默认值是no。
  • appendfilename:aof文件的默认文件名,默认值是appendonly.aof
  • appendfsync:aof持久化化策略配置。有三个值可以选: * no:不执行fsync,有操作系统保证数据同步到磁盘,速度最快 * always:每次写入都执行fsync,以保证数据同步到磁盘,速度最慢 * everysec:每秒执行一次fsync,这样aof就可能会对时1s的数据 (默认值,通常来说能在速度和数据安全性之间取得比较好的平衡。)
    • no-appendfsync-on-rewirite:如果有子进程在进行保存操作,那么Redis就处于"不可同步"的状态。这实际上是说,在最差的情况下可能会丢掉30秒钟的日志数据。(默认Linux设定)如果把这个设置成"yes"带来了延迟问题,就保持"no",这是保存持久数据的最安全的方式。
  • auto-aof-rewrite-percentage: aof自动重写配置,当目前aof文件大小超过上一次重写的aof文件大小的百分之多少进行重写,即当aof文件增长到一定大小的时候,Redis能够调用bgrewriteaof对日志文件进行重写。默认值是100
  • auto-aof-rewrite-min-size:AOF文件到达重写的阈值,避免了达到约定百分比但尺寸仍然很小的情况还要重写,默认64m,这点内存啥都干不了,一般设置都是以GB为单位。
  • aof-load-truncated:如果设置为yes,如果一个因异常被截断的AOF文件被redis启动时加载进内存,redis将会发送日志通知用户;如果设置为no,erdis将会拒绝启动。此时需要用"redis-check-aof"工具修复文件。

LUA SCRIPTING

  • lua-time-limit:一个lua脚本执行的最大时间,单位:ms。默认值5000。

REDIS CLUSTER

  • cluster-enable:是否开启集群,默认是不开启的。
  • cluster-config-file:集群配置文件名称,每个节点都有一个集群相关的配置文件,持久化保存集群的信息。这个文件不需要手动配置,它由redis生成并更新。默认配置为nodes-6379.conf
  • cluster-node-timeout:可以设置值为15000。节点互连超时的阈值,集群节点超时毫秒数。
  • cluster-slave-validity-factor:在进行故障转移的时候,全部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:master的slave数量大于该值,slave才能迁移到其他孤立master上,如这个参数若被设为2,那么只有当一个主节点拥有2 个可工作的从节点时,它的一个从节点会尝试迁移。
  • cluster-require-full-coverage:默认情况下,集群全部的slot有节点负责,集群状态才为ok,才能提供服务。 设置为no,可以在slot没有全部分配的时候提供服务。不建议打开该配置,这样会造成分区的时候,小分区的master一直在接受写请求,而造成很长时间数据不一致。

留言区

还能输入500个字符