配置 作用 默认
    bind 当配置了bind之后:
    - 只有bind指定的ip可以直接访问Redis,这样可以避免将Redis服务暴露于危险的网络环境中,防止一些不安全的人随随便便通过远程访问Redis
    - 如果bind选项为空或0.0.0.0的话,那会接受所有来自于可用网络接口的连接
    127.0.0.1
    protected-mode protected-mode是Redis3.2之后的新特性,用于加强Redis的安全管理,当满足以下两种情况时,protected-mode起作用:
    - bind未设置,即接收所有来自网络的连接
    - 密码未设置

    当满足以上两种情况且protected-mode=yes的时候,访问Redis将报错,即密码未设置的情况下,无密码访问Redis只能通过安装Redis的本机进行访问 | yes | | port | Redis访问端口,由于Redis是单线程模型,因此单机开多个Redis进程的时候会修改端口,不然一般使用大家比较熟悉的6379端口就可以了 | 6379 | | tcp-backlog | 半连接队列的大小,对半连接队列不熟的可以看我以前的文章TCP:三次握手、四次握手、backlog及其他 | 511 | | timeout | 指定在一个client空闲多少秒之后就关闭它,0表示不管 | 0 | | tcp-keepalive | 设置tcp协议的keepalive,从Redis的注释来看,这个参数有两个作用:
    - 发现死的连接
    - 从中间网络设备的角度看连接是否存活
    | 300 | | daemonize | 这个前面说过了,指定Redis是否以守护进程的方式启动 | no | | supervised | 这个参数表示可以通过upstart和systemd管理Redis守护进程,这个具体和操作系统相关,资料也不是很多,就暂时不管了 | no | | pidfile | 当Redis以守护进程的方式运行的时候,Redis默认会把pid写到pidfile指定的文件中 | /var/run/redis_6379.pid | | loglevel | 指定Redis的日志级别,Redis本身的日志级别有notice、verbose、notice、warning四种,按照文档的说法,这四种日志级别的区别是:
    - debug,非常多信息,适合开发/测试
    - verbose,很多很少有用的信息(直译,读着拗口,从上下文理解应该是有用信息不多的意思),但并不像debug级别这么混乱
    - notice,适度的verbose级别的输出,很可能是生产环境中想要的
    - warning,只记录非常重要/致命的信息
    | notice | | logfile | 配置log文件地址,默认打印在命令行终端的窗口上 | “” | | databases | 设置Redis数据库的数量,默认使用0号DB | 16 | | save | 把Redis数据保存到磁盘上,这个是在RDB的时候用的,介绍RDB的时候专门说这个 | save 900 1
    save 300 10
    save 60 10000 | | stop-writes-on-bgsave-error | 当启用了RDB且最后一次后台保存数据失败,Redis是否停止接收数据。
    这会让用户意识到数据没有正确持久化到磁盘上,否则没有人会注意到灾难(disaster)发生了。
    如果Redis重启了,那么又可以重新开始接收数据了 | yes | | rdbcompression | 是否在RBD的时候使用LZF压缩字符串,如果希望省点CPU,那就设为no,不过no的话数据集可能就比较大 | yes | | rdbchecksum | 是否校验RDB文件,在RDB文件中有一个checksum专门用于校验 | yes | | dbfilename | dump的文件位置 | dump.rdb | | dir | Redis工作目录 | ./ | | slaveof | 主从复制,使用slaveof让一个节点称为某个节点的副本,这个只需要在副本上配置 | 关闭 | | masterauth | 如果主机使用了requirepass配置进行密码保护,使用这个配置告诉副本连接的时候需要鉴权 | 关闭 | | slave-serve-stale-data | 当一个Slave与Master失去联系或者复制正在进行中,Slave可能会有两种表现:
    - 如果为yes,Slave仍然会应答客户端请求,但返回的数据可能是过时的或者数据可能是空的
    - 如果为no,在执行除了INFO、SLAVEOF两个命令之外,都会应答”SYNC with master in progres”错误
    | yes | | slave-read-only | 配置Redis的Slave实例是否接受写操作,即Slave是否为只读Redis | yes | | slave-priority | 从站优先级是可以从redis的INFO命令输出中查到的一个整数。当主站不能正常工作时,redis sentinel使用它来选择一个从站并将它提升为主站。
    低优先级的从站被认为更适合于提升,因此如果有三个从站优先级分别是10, 100, 25,sentinel会选择优先级为10的从站,因为它的优先级最低。
    然而优先级值为0的从站不能执行主站的角色,因此优先级为0的从站永远不会被redis sentinel提升。 | 100 | | requirepass | 设置客户端认证密码 | 关闭 | | rename-command | 命令重命名,对于一些危险命令例如:
    - flushdb(清空数据库)
    - flushall(清空所有记录)
    - config(客户端连接后可配置服务器)
    - keys(客户端连接后可查看所有存在的键)
    作为服务端redis-server,常常需要禁用以上命令来使得服务器更加安全,禁用的具体做法是是:
    - rename-command FLUSHALL “”
    也可以保留命令但是不能轻易使用,重命名这个命令即可:
    - rename-command FLUSHALL abcdefg
    这样,重启服务器后则需要使用新命令来执行操作,否则服务器会报错unknown command | 关闭 | | maxclients | 设置同时连接的最大客户端数量,一旦达到了限制,Redis会关闭所有的新连接并发送一个”max number of clients reached”的错误 | 关闭,默认10000 | | maxmemory | 不要使用超过指定数量的内存,一旦达到了,Redis会尝试使用驱逐策略来移除键 | 关闭 | | maxmemory-policy | 当达到了maxmemory之后Redis如何移除数据,有以下的一些策略:
    - volatile-lru,使用LRU算法,移除范围为设置了失效时间的
    - allkeys-lru,根据LRU算法,移除范围为所有的
    - volatile-random,使用随机算法,移除范围为设置了失效时间的
    - allkeys-random,使用随机算法,移除范围为所有的
    - volatile-ttl,移除最近过期的数据
    - noeviction,不过期,当写操作的时候返回错误
    注意,当写操作且Redis发现没有合适的数据可以移除的时候,将会报错 | 关闭,noeviction | | appendonly | 是否开启AOF,关于AOF后面再说 | no | | appendfilename | AOF文件名称 | appendonly.aof | | appendfsync | 操作系统实际写数据到磁盘的频率,有以下几个选项:
    - always,每次有写操作都进行同步,慢,但是最安全
    - everysec,对写操作进行累积,每秒同步一次,是一种折衷方案
    - no,当操作系统flush缓存的时候同步,性能更好但是会有数据丢失的风险
    当不确定是使用哪种的时候,官方推荐使用everysec,它是速度与数据安全之间的一种折衷方案 | everysec | | no-appendfsync-on-rewrite | aof持久化机制有一个致命的问题,随着时间推移,aof文件会膨胀,当server重启时严重影响数据库还原时间,因此系统需要定期重写aof文件。
    重写aof的机制为bgrewriteaof(另外一种被废弃了,就不说了),即在一个子进程中重写从而不阻塞主进程对其他命令的处理,但是这依然有个问题。
    bgrewriteaof和主进程写aof,都会操作磁盘,而bgrewriteaof往往涉及大量磁盘操作,这样就会让主进程写aof文件阻塞。
    针对上述问题,可以使用此时可以使用no-appendfsync-on-rewrite参数做一个选择:
    - no,最安全,不丢失数据,但是需要忍受阻塞
    - yes,数据写入缓冲区,不造成阻塞,但是如果此时redis挂掉就会丢失数据,在Linux操作系统默认设置下,最坏场景下会丢失30秒数据
    | no | | auto-aof-rewrite-percentage | 本次aof文件超过上次aof文件该值的百分比时,才会触发rewrite | 100 | | auto-aof-rewrite-min-size | aof文件最小值,只有到达这个值才会触发rewrite,即rewrite由auto-aof-rewrite-percentage+auto-aof-rewrite-min-size共同保证 | 64mb | | aof-load-truncated | redis在以aof方式恢复数据时,对最后一条可能出问题的指令的处理方式:
    - yes,log并继续
    - no,直接恢复失败
    | yes | | slowlog-log-slower-than | Redis慢查询的最低条件,单位微妙,即查询时间>这个值的会被记录 | 10000 | | slowlog-max-len | Redis存储的慢查询最大条数,超过该值之后会将最早的slowlog剔除 | 128 | | lua-time-limit | 一个lua脚本执行的最大时间,单位为ms | 5000 | | cluster-enabled | 正常来说Redis实例是无法称为集群的一部分的,只有以集群方式启动的节点才可以。为了让Redis以集群方式启动,就需要此参数。 | 关闭 | | cluster-config-file | 每个集群节点应该有自己的配置文件,这个文件是不应该手动修改的,它只能被Redis节点创建且更新,每个Redis集群节点需要不同的集群配置文件 | 关闭,nodes-6379.conf | | cluster-node-timeout | 集群中一个节点向其他节点发送ping命令时,必须收到回执的毫秒数 | 关闭,15000 | | cluster-slave-validity-factor | 如果该项设置为0,不管Slave节点和Master节点间失联多久都会一直尝试failover。
    比如timeout为5,该值为10,那么Master与Slave之间失联50秒,Slave不会去failover它的Master | 关闭,10 | | cluster-migration-barrier | 当一个Master拥有多少个好的Slave时就要割让一个Slave出来。
    例如设置为2,表示当一个Master拥有2个可用的Slave时,它的一个Slave会尝试迁移 | 关闭,1 | | cluster-require-full-coverage | 有节点宕机导致16384个Slot全部被覆盖,整个集群是否停止服务,这个值一定要改为no | 关闭,yes |