Redis详解(二)redis配置文件

1,369 阅读11分钟

一、前言

       上一篇我们介绍了如何安装Redis(Redis详解(一)redis简介及安装),本篇将带大家重点详细介绍Redis的配置文件(redis.conf) 关于Redis的很多功能的配置都在此文件中完成的。

二、配置文件详解

  1. 开头说明

    当配置中需要配置内存大小时,可以使用 1k,5g,4m等类似的格式,以及转换方式并且不区分大小写。

  2. INCLUDES

    个性化配置,可以引入多个配置文件但是后加载的配置文件信息会覆盖先加载的配置文件信息。

  3. MODULES

    redis3.0的爆炸功能是新增了集群,而redis4.0就是在3.0的基础上新增了许多功能,其中自定义模块配置就是其中之一。让用户可以根据自己需求来扩展redis相关的功能了。比如redis对布隆过滤器的支持就是通过第三方module来实现的。

  4. NETWORK

    • bind (bind 127.0.0.1)只接受来自该IP地址的请求,如果不设置将处理所有请求,可设置多个。

    • protected-mode (protected-mode yes)是否开启保护模式默认开启(yes)。假如配置里没有指定bind和密码。开启该参数后,redis只会本地进行访问,拒绝外部访问。如果开启了密码和bind,可以开启。否则最好关闭,设置为no

    • port (port 6379)redis监听的端口号

    • timeout (timeout 0)设置客户端连接时的超时时间,单位为秒。当客户端在这段时间内没有发出任何指令,那么关闭该连接。默认值为0,表示不关闭。

    • tcp-backlog (tcp-backlog 511)此参数确定了TCP连接中已完成队列(完成三次握手之后)的长度, 当然此值必须不大于Linux系统定义的/proc/sys/net/core/somaxconn值,默认是511,而Linux的默认参数值是128。当系统并发量大并且客户端速度缓慢的时候,可以将这二个参数一起参考设定。该内核参数默认值一般是128,对于负载很大的服务程序来说大大的不够。一般会将它修改为2048或者更大。在/etc/sysctl.conf中添加:net.core.somaxconn = 2048,然后在终端中执行sysctl -p。

    • tcp-keepalive (tcp-keepalive 300)单位是秒,表示将周期性的使用SO_KEEPALIVE检测客户端是否还处于健康状态,避免服务器一直阻塞,默认300s,如果设置为0,则不会周期性的检测。

  5. GENERAL

    • daemonize (daemonize no)是否后台运行。

    • supervised (supervised no) 这个参数表示可以通过upstart和systemd管理Redis守护进程,这个具体和操作系统相关,资料也不是很多,就暂时不管了。

    • pidfile (pidfile /var/run/redis_6379.pid)当Redis以守护进程的方式运行的时候,Redis默认会把pid写到pidfile指定的文件中。

    • loglevel (loglevel notice)指定了服务端日志的级别。级别包括:debug(很多信息,方便开发、测试),verbose(许多有用的信息,但是没有debug级别信息多),notice(适当的日志级别,适合生产环境),warn(只有非常重要的信息)。

    • logfile (logfile "")配置log文件地址,默认打印在命令行终端的窗口上

    • databases (databases 16)数据库的数目,默认的数据库是0号数据库 ,可以在每个连接上使用select < dbid > 命令选择一个不同的数据库,dbid 是一个介于0到databases - 1 之间的数值。默认值是 16,也就是说默认Redis有16个数据库。

    • always-show-logo (always-show-logo yes)启动redis时是否显示logo。

  6. SNAPSHOTTING

    • save 这里是用来配置触发 Redis的持久化条件(RDB持久化方式),也就是什么时候将内存中的数据保存到硬盘。默认如下配置:

      • save 900 1:表示900 秒内如果至少有 1 个 key 的值变化,则保存。
      • save 300 10:表示300 秒内如果至少有 10 个 key 的值变化,则保存。
      • save 60 10000:表示60 秒内如果至少有 10000 个 key 的值变化,则保存。
    • stop-writes-on-bgsave-error (stop-writes-on-bgsave-error yes) 持久化如果出错,是否要继续工作。当启用了RDB且最后一次后台保存数据失败,Redis是否停止接收数据。这会让用户意识到数据没有正确持久化到磁盘上,否则没有人会注意到灾难(disaster)发生了。如果Redis重启了,那么又可以重新开始接收数据了。

    • rdbcompression (rdbcompression yes)rdb持久化的时候启动压缩,需要消耗一定的cpu资源。如果你不想消耗CPU来进行压缩的话,可以设置为关闭此功能,但是存储在磁盘上的快照会比较大。

    • rdbchecksum (rdbchecksum yes) 保存rdb文件的时候,进行错误的检查校验。

    • dbfilename (dbfilename dump.rdb)设置快照的文件名。

    • dir(dir ./)rdb持久化文件保存的目录,redis客户端下执行config get dir会显示该路径,如过该路径下有dump.rdb文件,redis启动时就会恢复其中的数据。

  7. REPLICATION

    • slave-serve-stale-data (slave-serve-stale-data yes)默认值为yes。当一个 slave 与 master 失去联系,或者复制正在进行的时候,slave 可能会有两种表现:

      • 如果为 yes ,slave 仍然会应答客户端请求,但返回的数据可能是过时,或者数据可能是空的在第一次同步的时候。

      • 如果为 no ,在你执行除了 info he salveof 之外的其他命令时,slave 都将返回一个 "SYNC with master in progress" 的错误。

    • slave-read-only (slave-read-only yes) 配置Redis的Slave实例是否接受写操作,即Slave是否为只读Redis。

    • repl-diskless-sync(repl-diskless-sync no)主从数据复制是否使用无硬盘复制功能。

    • repl-diskless-sync-delay(repl-diskless-sync-delay 5)当启用无硬盘备份,服务器等待一段时间后才会通过套接字向从站传送RDB文件,这个等待时间是可配置的。 这一点很重要,因为一旦传送开始,就不可能再为一个新到达的从站服务。从站则要排队等待下一次RDB传送。因此服务器等待一段 时间以期更多的从站到达。延迟时间以秒为单位,默认为5秒。要关掉这一功能,只需将它设置为0秒,传送会立即启动。默认值为5。

    • repl-disable-tcp-nodelay(repl-disable-tcp-nodelay no)同步之后是否禁用从站上的TCP_NODELAY 如果你选择yes,redis会使用较少量的TCP包和带宽向从站发送数据。但这会导致在从站增加一点数据的延时。 Linux内核默认配置情况下最多40毫秒的延时。如果选择no,从站的数据延时不会那么多,但备份需要的带宽相对较多。默认情况下我们将潜在因素优化,但在高负载情况下或者在主从站都跳的情况下,把它切换为yes是个好主意。默认值为no。

  8. SECURITY

    • rename-command 命令重命名,特别是对于一些危险命令为了使得服务器更加安全。为了服务的安全我们一般这样做:rename-command FLUSHALL "" 或者 rename-command FLUSHALL abcdefg

      • flushdb(清空数据库)

      • flushall(清空所有记录)

      • config(客户端连接后可配置服务器)

      • keys(客户端连接后可查看所有存在的键)

    • requirepass (requirepass foobared)设置redis连接密码

  9. CLIENTS

    • maxclients (10000) 设置客户端最大并发连接数,默认无限制,Redis可以同时打开的客户端连接数为Redis进程可以打开的最大文件。 描述符数-32(redis server自身会使用一些),如果设置 maxclients为0 。表示不作限制。当客户端连接数到达限制时,Redis会关闭新的连接并向客户端返回max number of clients reached错误信息
  10. MEMORY MANAGEMENT

    • maxmemory < bytes> 设置Redis的最大内存,如果设置为0 。表示不作限制。通常是配合下面介绍的maxmemory-policy参数一起使用。

    • maxmemory-policy(maxmemory-policy noeviction) 内存达到上限后(达到maxmemory设置的最大值)的处理策略。

      • volatile-lru 从已设置过期时间的内存数据集中挑选最近最少使用的数据淘汰。

      • allkeys-lru 从内存数据集中挑选最近最少使用的数据淘汰。

      • volatile-lfu 从已设置过期时间的内存数据集中挑选最近最多使用的数据淘汰。(Redis4.0后出现)

      • allkeys-lfu 从内存数据集中挑选最近最多使用的数据淘汰。(Redis4.0后出现)

      • volatile-random 从已设置过期时间的内存数据集中任意挑选数据淘汰。

      • allkeys-random 从内存数据集中任意挑选数据淘汰。

      • volatile-ttl 移除即将过期的key。

      • noeviction 不淘汰任何数据,直接返回写入数据异常。

  11. LAZY FREEING (Redis 4.0 新增配置)

    • lazyfree-lazy-eviction no 当内存达到上限,分配失败后是否异步驱逐key,。

    • lazyfree-lazy-expire no 是否异步进行key过期事件的处理。

    • lazyfree-lazy-server-del no del命令是否异步执行删除操作,类似unlink。

    • replica-lazy-flush no 从节点做全同步的时候,是否异步flush本地db。

    • lazyfree-lazy-user-del no 执行DEL命令时是否基于lazyfree异步删除数据。

  12. APPEND ONLY MODE

    • appendonly (appendonly no)是否开启AOF,默认是rdb方式。

    • appendfilename (appendfilename appendonly.aof)持久化的文件名字。

    • appendfsync (appendfsync everysec)AOF持久化策略

      • always 每次写入都会执行fsync,消耗性能。

      • everysec 每秒执行一次fsync,可能会丢失这1s的数据。

      • no 不执行fsync,这个时候操作系统自己同步数据,速度最快。

    • no-appendfsync-on-rewrite(no-appendfsync-on-rewrite) 当主进程执行写AOF文件的时候不进行appendfsync操作。使用推荐:无法忍受延迟,而可以容忍少量的数据丢失,则设置为yes。如果应用系统无法忍受数据丢失,则设置为no

    • auto-aof-rewrite-percentage(auto-aof-rewrite-percentage 100)本次aof文件超过上次aof文件该值的百分比时,才会触发rewrite 。

    • auto-aof-rewrite-min-size(auto-aof-rewrite-min-size 64mb)设置允许重写的最小aof文件大小,避免了达到约定百分比但尺寸仍然很小的情况还要重写。

    • aof-load-truncated(aof-load-truncated yes)redis在恢复时,会忽略最后一条可能存在问题的指令。默认值yes。即在aof写入时,可能存在指令写错的问题(突然断电,写了一半),这种情况下,yes会log并继续,而no会直接恢复失败。

  13. LUA SCRIPTING

    • lua-time-limit(lua-time-limit 5000)一个lua脚本执行的最大时间,单位为ms。
  14. REDIS CLUSTER

    • cluster-enabled 集群开关,默认是不开启集群模式。

    • cluster-config-file 每个集群节点应该有自己的配置文件,这个文件是不应该手动修改的,它只能被Redis节点创建且更新,每个Redis集群节点需要不同的集群配置文件

    • cluster-node-timeout 集群中节点互连(发送ping命令)超时的阀值,集群节点超时毫秒数。

    • cluster-migration-barrier 当一个Master拥有多少个好的Slave时就要割让一个Slave出来。例如设置为2,表示当一个Master拥有2个可用的Slave时,它的一个Slave会尝试迁移。

    • 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-require-full-coverage 默认情况下,集群全部的slot有节点负责,集群状态才为ok,才能提供服务。 设置为no,可以在slot没有全部分配的时候提供服务。不建议打开该配置,这样会造成分区的时候,小分区的master一直在接受写请求,而造成很长时间数据不一致。


有一种境界叫自黑:聪明绝顶的我再没用过梳子。

关注微信公众号‘秃顶记’,聪明绝顶走到黑。