Redis系列—redis.conf文件详解

时间:2021-03-03 20:35:42

Redis 3.2版本中,最重要的配置文件就是存在于安装目录中的名叫 redis.conf 的文件。其中的范本格式清楚说明了 Redis 3.2 版本中可以配置的主要信息和含义。主要包括几个方面:网络配置项、一般配置项、快照配置项、复制(高可用)配置项、集群配置项、安全配置项、资源限制配置项、LUA脚本配置、慢日志配置、监控配置、事件通知配置、数据结构高级配置等。

网络配置项和一般配置项

  bind:绑定的主机地址,不设置默认将处理所有请求。由于一台主机可能有多个IP,如果这里设置192.168.1.100,那么Redis只会处理达到这个IP的数据请求。

  protected-mode:设置是否开启网络保护模式,默认为yes(开启)。这个选项的工作方式是,如果您没有设置了bind参数,也没有设置安全登录密码,则当这个参数开启时Redis只允许本地连接的客户端访问。也就是说如果您不设置bind参数,而又需要其它客户端通过网络访问,那么就设置这个参数为no(关闭)吧。

  port:Redis服务的工作端口,默认为6379。

  tcp-backlog:在Linux服务器上有一个配置参数“net.core.somaxconn”,这是参数表示socket监听(listen)的backlog上限。所谓backlog是指已经和服务器完成了TCP三次握手确认,但是还没有被上层应用程序处理的请求队列。这个参数在操作系统层面的默认值是128,很显然在压力非常大的系统上,这个值小了一点。您可以修改成2048或者更大,而为Redis配置的tcp-backlog应该小于或者等于您在操作系统上设置的最大限制值(否则Redis上面设置再大也没有用)。net.core.somaxconn参数的调整可参见其它资料。

  timeout:该参数表示当某一个客户端连接上来并闲置timeout(单位秒)的时间后,Redis服务端就主动关闭这个客户端连接。该配置参数的默认值为0,表示关闭这个功能。

  tcp-keepalive:客户端TCP连接的健康性检查,如果不设置为0就表示Redis服务端会定时发送SO_KEEPALIVE心跳机制检测客户端的反馈情况。该配置的默认值为300秒,既是300秒检测一次。健康性检查的好处是,在客户端异常关闭的情况下,Redis服务端可以发现这个问题,并主动关闭对端通道。这个参数建议开启。

  daemonize:当为yes的时候,以守护进程的模式运行。该参数的默认值为 no,主要目的是为了在测试环境下调试方便;当运行在生产环境时,可以将这个选项配置为yes。

  pidfile:当Redis没有以守护进程的方式运行,这个pid文件的配置选项不会起作用。当redis以守护进程方式运行时,这个配置选项设置的文件就会被创建和使用。

  loglevel:配置的Redis日志级别,默认为notice。这个选项可以设置以下这些值:debug,非常多的信息无论有用的还是没用的都会被显示或者记录,一般用于开发和测试状态;verbose,比起debug要少很多,但是也极少出现有用的信息;notice,信息量适度而且一般不会错过有用的信息,可用于生产环境;warning,只有非常有用和危险的信息会被显示或者记录,建议使用warning级别的日志记录模式。

  logfile:日志文件存在的位置,默认为空字符串设置,这时日志会打印到标准输出设备。

  syslog-enabled:默认为no(开启),当配置为yes时,Redis的日志会输出到系统日志。

  databases:从Redis很早的版本开始,它就支持多个独立的内存数据库同时存在。该值设置数据库的数量,默认数据库为16,可以使用SELECT <dbid> 命令在连接上指定数据库id。

安全和资源限制配置项

  requirepass:该选项指定客户端在完成连接后,在执行任何其它命令前必须使用的鉴权密码。这在技术团队需要拒绝一些不信任的客户端访问Redis服务的情况下,是比较有用的。

  rename-command:在生产环境下,有一些Redis命令是非常危险的,例如FLUSHALL命令和FLUSHDB命令。所以Redis服务器为生产环境的指令安全性提供了一个重命名功能,通过这个功能我们可以将一些需要避免执行的指令变更成其它指令。例如以下设定可以将FLUSHALL指令变更成空字符:

......
rename-command FLUSHALL ""
rename-command FLUSHDB ""
......

这是再使用Redis的客户端执行以上命令,就会收到以下的提示:

......
// 开启了密码功能,并设置密码为123456

# redis-cli -h 192.168.61.140 -a 123456

192.168.61.140:6379> FLUSHDB
(error) ERR unknown command 'FLUSHDB'
192.168.61.140:6379> FLUSHALL
(error) ERR unknown command 'FLUSHALL'
......

  maxclients:设定当前同时连接到本Redis服务上的客户端数量,默认为10000。注意这个值的设定还和操作系统上file limit参数有关联,实际情况是10000个同时正常的客户端连接完全够用,如果实际情况需要调整则一定要同时确认该设定值没有超过操作系统上设定的文件描述符限制数量。

  maxmemory:该选项是告诉Redis当使用了多少物理内存后就开始拒绝后续的写入请求,该参数能很好的保护好你的Redis不会因为使用了过多的物理内存而导致swap,最终严重影响性能甚至崩溃。该参数的设置单位为bytes,建议的设置范围不要超过操作系统可支配内存的 3/5,例如您的操作系统可支配8GB内存,那么建议的设置值就是5GB,也就是5242880k、5120mb、5gb。在配置容量大小时,Redis支持各种单位简写,也就是说1GB 1Gb 1gB都是一个意思。如果不设置该参数就表示不限制,但这种方式在生产环境下不推荐。

  maxmemory-policy:这个参数非常重要,它设置了当内存达到最大可用数量时的内存清除策略。
  
  该选项可以设置以下这些值:
  
  volatile-lru设定值,使用Redis时如果不是有特殊的存储要求,都建议设定Key的过期时间expire。一旦设置了过期时间Redis会将这些Key放置到一个LRU队列中(关于LRU队列算法的内容可以参考本专题之前的文章),Redis使用“惰性删除”+“定期删除”的方式对LRU队列中过期的Key进行清理。当内存达到满载状态时,Redis也会启动一次清除操作。
  
  allkeys-lru设定值将忽略Key的过期时间设定,将所有Key放入LRU队列并清除过期的数据。
  
  volatile-random该选项将对过期的Key值采取“随即选取”算法进行清除。allkeys-random选项和volatile-random选项类似,只不过将Key的选取范围扩大到了所有Key,而不只针对设定了过期时间expire的Key。
  
  volatile-ttl,该选项将清除当前即将过期的Key(最小TTL算法)。
  
  noeviction,如果清除策略设置该值,在Redis内存满载情况下将不启动任何清除策略,直接拒绝后续的写操作。noeviction是一个默认策略,所以建议在生产环境中一定要进行清除策略的修改。

  maxmemory-samples:以上提到的LRU算法和TTL算法在Redis中的实现并不是固定的,Redis支持技术人员根据实际情况在算法性能和精度间进行调整。maxmemory-samples配置项实际上就是一个Key的抽样值,值越高算法精度越高。例如设置为10的时候,Redis中的LRU算法基本上处理失效的Key就非常精确了,但是却需要消耗较多的CPU资源;设置为3的时候,虽然处理失效的Key精度不高,但是处理速度非常快。该选项的默认值为5。

日志和监控配置项

慢日志

  Redis从很早的版本就提供了一个慢操作的日志记录功能,称为慢日志。当Redis中某一个内部操作所耗费的时间超过了设定的一个限制阀值,这个操作就会被慢日志功能记录在内存中。注意这里提到的是内部操作时间,并不包括可能的网络I/O操作时间。

  通过Redis的客户端使用slowlog get、slowlog len、slowlog reset等命令可以查看当然Redis服务端记录的慢日志情况。Redis的配置信息中提供了两个参数供技术团队调整慢日志功能:slowlog-log-slower-than和slowlog-max-len。

  slowlog-log-slower-than:这个参数就是给定慢日志的时间阀值,单位为微妙。也就是说1000000等于1秒。该参数的默认为10000。请注意,如果该参数的值设置为负数,将禁用慢日志功能;如果设置为0,将会记录每一条操作日志。

  slowlog-max-len:这个参数存储Redis服务端能够记录的慢日志总长度。这个数值没有上限,只是需要技术团队注意这会消耗宝贵的内存资源,实际上默认的128就是比较实用的设置值。

延迟监控功能

  LATENCY监控器功能,是从Redis Version 2.8.3开始提供的一个重要的反映其延迟状态的监控功能。其工作任务是当技术人员设置了一个延迟操作的时间阀值后,凡是超过了这个阀值时间的操作都将被认为是执行缓慢的操作被记录下来。Redis客户端在登录后,可以使用诸如LATENCY LATEST、LATENCY HISTORY、LATENCY RESET、LATENCY GRAPH、LATENCY DOCTOR等命令控制/查询LATENCY监控器。LATENCY监控器功能更详细的介绍,可以参看Redis官方文档中的介绍:https://redis.io/topics/latency-monitor

  latency-monitor-threshold,这个参数项用来设置操作时间的阀值,如果关闭延迟监控功能的话,可以将这个值设置为0。另外客户端连接可以独立设置这个阀值,只需要在连接Redis服务端成功后,执行“CONFIG SET latency-monitor-threshold XXXX”命令即可。