Redis配置
redis-5.0.4 配置解读
开头说明
1 | Redis configuration file example. |
- 容量单位不区分大小写,G和GB有区别
INCLUDES(其他配置文件设置)
1 | ################################# INCLUDES ################################### |
- 可以设置多个配置文件组合使用
NETWORK(网络设置)
1 | ################################# NETWORK ##################################### |
- bind 127.0.0.1 # 只接受来自该IP地址的请求,如果不设置将处理所有请求,可设置多个。
- protected-mode yes # 是否开启保护模式默认开启(yes)。假如配置里没有指定bind和密码。开启该参数后,redis只会本地进行访问,拒绝外部访问。如果开启了密码和bind,可以开启。否则最好关闭,设置为no
- port 6379 # 监听的端口号,默认6379
- timeout 0 # 设置客户端连接时的超时时间,单位为秒。当客户端在这段时间内没有发出任何指令,那么关闭该连接。默认值为0,表示不关闭。
- tcp-keepalive 300 # 单位是秒,表示将周期性的使用 SO_KEEPALIVE 检测客户端是否还处于健康状态,避免服务器一直阻塞,默认300s,如果设置为0,则不会周期性的检测。
GENERAL
1 | ################################ GENERAL ##################################### |
守护进程设置
- daemonize no # 是否在后台执行,yes:后台运行,即以守护线程的方式运行;no:不是后台运行。默认是no。
- supervised no # 用来管理守护进程的
- pidfile /var/run/redis_6379.pid # 当服务器运行非守护进程时,如果在配置中没有指定pid文件,则不会创建pid文件。当服务器被守护时,即使没有指定pid文件也会被使用,默认为”/var/run/redis.pid”。
日志设置
loglevel notice # 日志级别设置,默认 notice。(有四种级别)
- debug # 很多信息,方便开发、测试
- verbose # 许多有用的信息,但是没有debug级别信息多
- notice # 适当的日志级别,适合生产环境
- waring # 只有非常重要的信息
logfile “” # 配置log文件地址
数据库数量设置
- databases 16 # 默认16个数据库
logo设置
- always-show-logo yes # 是否总是显示 redis 的 logo 即开启 redis 时候显示的打印的 logo
SNAPSHOTTING(快照:持久化(RDB))
1 | ############################### SNAPSHOTTING ################################ |
- save 持久化规则,持久化文件 .rdb .aof文件中(可开启多种,满足任意一个条件执行)
- save 900 1 # 900秒内, 至少1个key进行了修改,就进行持久化
- save 300 10 # 300 秒内, 至少10个 key 进行了修改,则进行持久化
- save 60 10000 # 60秒内, 至少10000个 key 进行了修改,则进行持久化
- stop-writes-on-bgsave-error yes # 持久化如果出错,是否要继续工作。当启用了RDB且最后一次后台保存数据失败,Redis是否停止接收数据。这会让用户意识到数据没有正确持久化到磁盘上,否则没有人会注意到灾难(disaster)发生了。如果Redis重启了,那么又可以重新开始接收数据了。
- rdbcompression yes # rdb 持久化的时候启动压缩,需要消耗一定的 cpu 资源。如果你不想消耗 CPU 来进行压缩的话,可以设置为关闭此功能,但是存储在磁盘上的快照会比较大。
- rdbchecksum yes # 保存rdb文件的时候,进行错误的检查校验。
- dbfilename dump.rdb # 保存文件名称为 dump.rdb
- dir ./ # rdb 文件保存的目录,redis启动时就会恢复其中的数据。
REPLICATION(主从复制)
1 | ################################ REPLICATION ################################# |
replica-serve-stale-data yes # 当从库同主机失去连接或者复制正在进行,从机库有两种运行方式:
- yes # (默认设置),slave 仍然会应答客户端请求,但返回的数据可能是过时,或者数据可能是空的在第一次同步的时候。
- no # 副本会回复错误 “ SYNC with master in progress “ 到所有类型的命令,除了 INFO,replicaOF,AUTH,PING,SHUTDOWN,REPLCONF, ROLE, CONFIG,SUBSCRIBE, UNSUBSCRIBE,PSUBSCRIBE, PUNSUBSCRIBE, PUBLISH, PUBSUB,COMMAND, POST, HOST 和 LATENCY 。
replica-read-only yes # 作为从服务器,默认情况下是只读的(yes),可以修改成NO,用于写(不建议)
repl-diskless-sync no # 是否使用 socket 方式复制数据。目前 redis 复制提供两种方式, disk 和socket 。如果新的 slave 连上来或者重连的 slave 无法部分同步,就会执行全量同步, master 会生成 rdb 文件。有2种方式:
- disk 方式是 master 创建一个新的进程把 rdb 文件保存到磁盘,再把磁盘上的 rdb 文件传递给 slave 。 socket 是 master 创建一个新的进程,直接把 rdb 文件以 socket 的方式发给 slave 。 disk 方式的时候,当一个 rdb 保存的过程中,多个 slave 都能共享这个 rdb 文件。
- socket 的方式就的一个个 slave 顺序复制。在磁盘速度缓慢,网速快的情况下推荐用 socket 方式。
repl-diskless-sync-delay 5 # 当启用无硬盘备份,服务器等待一段时间后才会通过 socket 向从站传送 RDB 文件,这个等待时间是可配置的。 这一点很重要,因为一旦传送开始,就不可能再为一个新到达的从站服务。从站则要排队等待下一次 RDB 传送。因此服务器等待一段时间以期望更多的从站到达。延迟时间以秒为单位,默认为5秒。要关掉这一功能,只需将它设置为0秒,传送会立即启动。默认值为5。
repl-disable-tcp-nodelay no # 同步之后是否禁用从站上的TCP_NODELAY 如果你选择yes,redis会使用较少量的TCP包和带宽向从站发送数据。但这会导致在从站增加一点数据的延时。 Linux内核默认配置情况下最多40毫秒的延时。如果选择no,从站的数据延时不会那么多,但备份需要的带宽相对较多。默认情况下我们将潜在因素优化,但在高负载情况下或者在主从站都跳的情况下,把它切换为yes是个好主意。默认值为no。
SECURITY
1 | ################################# SECURITY ################################### |
requirepass foobared # 密码设置
rename-command CONFIG “” # 命令重命名,特别是对于一些危险命令为了使得服务器更加安全。(空字符串就是关闭命令)
CLIENTS(客户端连接设置)
1 | ################################## CLIENTS #################################### |
- maxclients 10000 # 设置客户端最大并发连接数,默认无限制,Redis 可以同时打开的客户端连接数为 Redis 进程可以打开的最大文件。 描述符数 -32 ( redis server 自身会使用一些),如果设置 maxclients 为 0 。表示不作限制。当客户端连接数到达限制时,Redis 会关闭新的连接并向客户端返回max number of clients reached 错误信息
MEMORY MANAGEMENT (内存管理)
1 | ############################# MEMORY MANAGEMENT ################################ |
- maxmemory
# 设置Redis的最大内存,如果设置为0 。表示不作限制。通常是配合下面介绍的maxmemory-policy参数一起使用。 - maxmemory-policy noeviction # 默认过期策略是:noeviction。有八种过期策略配置:
- volatile-lru -> Evict using approximated LRU, only keys with an expire set. # 只对设置了过期时间的 key 进行 lru
- allkeys-lru -> Evict any key using approximated LRU. # 删除lru算法的key
- volatile-lfu -> Evict using approximated LFU, only keys with an expire set. # 只对设置了过期时间的 key 进行 lfu
- allkeys-lfu -> Evict any key using approximated LFU. # 删除 lfu 算法的 key
- volatile-random -> Remove a random key having an expire set. # 随机删除即将过期 key
- allkeys-random -> Remove a random key, any key. # 随机删除
- volatile-ttl -> Remove the key with the nearest expire time (minor TTL) # 删除即将过期的
- noeviction -> Don’t evict anything, just return an error on write operations # 永不过期,返回错误
LAZY FREEING(Redis 4.0 新增配置)
1 | ############################ LAZY FREEING #################################### |
以非阻塞方式释放内存,使用以下配置指令调用
- lazyfree-lazy-eviction no # 当内存达到上限,分配失败后,是否异步驱逐key
- lazyfree-lazy-expire no # 是否异步进行 key 过期事件的处理
- lazyfree-lazy-server-del no # del 命令是否异步执行删除操作,类似unlink
- replica-lazy-flush no # replica client做全同步的时候,是否异步flush本地db
APPEND ONLY MODE(持久化(AOF))
1 | ############################# APPEND ONLY MODE ############################### |
- appendonly no # 默认不开启 AOF
- appendfilename “appendonly.aof” # 默认文件名
- appendfsync always # 持久化策略,默认always
- appendfsync always # 每次修改进行同步
- appendfsync everysec # 每秒执行一次同步
- appendfsync no # 不进行同步, 由操作系统进行同步,速度最快
- no-appendfsync-on-rewrite no # 当主进程执行写 AOF 文件的时候不进行 appendfsync 操作。使用推荐:无法忍受延迟,而可以容忍少量的数据丢失,则设置为yes。如果应用系统无法忍受数据丢失,则设置为no。
- auto-aof-rewrite-percentage 100 # 本次aof文件超过上次aof文件该值的百分比时,才会触发rewrite 。
- auto-aof-rewrite-min-size 64mb # 设置允许重写的最小aof文件大小,避免了达到约定百分比但尺寸仍然很小的情况还要重写
- aof-load-truncated yes # redis在恢复时,会忽略最后一条可能存在问题的指令。默认值yes。即在aof写入时,可能存在指令写错的问题(突然断电,写了一半),这种情况下,yes会log并继续,而no会直接恢复失败。
- aof-use-rdb-preamble yes # 当重写AOF文件时,Redis能够使用RDB的前导,AOF文件可以更快地重写和恢复。当这个选项被打开时,重写的AOF文件由两个不同的节组成:(RDB文件)(AOF尾巴)
LUA SCRIPTING
1 | ############################### LUA SCRIPTING ############################### |
- lua-time-limit 5000 # 一个lua脚本执行的最大时间,单位为ms。
REDIS CLUSTER(redis 集群)
1 | ############################### REDIS CLUSTER ############################### |
cluster-enabled yes # 集群开关,默认是不开启集群模式(默认被注释掉)。
cluster-config-file nodes-6379.conf # 每个集群节点应该有自己的配置文件,这个文件是不应该手动修改的,它只能被Redis节点创建且更新,每个Redis集群节点需要不同的集群配置文件
cluster-node-timeout 15000 # 集群中节点互连(发送ping命令)超时的阀值,集群节点超时毫秒数。
cluster-replica-validity-factor 10 # 在进行故障转移的时候,全部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 1 # 当一个Master拥有多少个好的Slave时就要割让一个Slave出来。例如设置为2,表示当一个Master拥有2个可用的Slave时,它的一个Slave会尝试迁移。
cluster-require-full-coverage yes # 默认情况下,集群全部的 slot 有节点负责,集群状态才为ok,才能提供服务。 设置为no,可以在slot没有全部分配的时候提供服务。不建议打开该配置,这样会造成分区的时候,小分区的master一直在接受写请求,而造成很长时间数据不一致。
cluster-replica-no-failover no #
CLUSTER DOCKER/NAT support
1 | In certain deployments, Redis Cluster nodes address discovery fails, because |
在一些特定的部署场景下,redis cluster 节点地址自动发现会失败,因为地址被NAT了,或者端口 被转发了(Docker容器中)。 为了让redis cluster在这种环境下正常工作,需要静态配置地址和端口,具体配置如下:
- cluster-announce-ip 10.10.10.10
- cluster-announce-port 6379
- cluster-announce-bus-port 6380
如果配置文件中没有上述配置项,那么rediscluster会使用标准的自动发现机制。
SLOW LOG
1 | ################################# SLOW LOG ################################### |
- slowlog-log-slower-than 10000 # 慢日志执行时间,单位是微秒,1000000等于1秒
- slowlog-max-len 128 # slow长度,如果命令大于128,老的那个就没了,这个值没有限制,如果设置太大会占内存 可以通过 SLOWLOG RESET 命令来重置这个队列
LATENCY MONITOR
1 | ############################### LATENCY MONITOR ############################## |
- latency-monitor-threshold 0 # redis 延迟监控系统会在运行时抽样一部分命令来帮助用户分析 redis 卡顿的原因。 通过 LATENCY 命令可以打印一些视图和报告。 redis 只会记录那些大于设定毫秒数的命令。 如果要关闭这个功能,就将 latency-monitor-threshold 设置为 0。 默认情况下 monitor 是关闭的,没有延迟问题不要一直开着 monitor ,因为开这个功能可能会对性能有很大影响。 在运行时也可以开这个功能,执行这个命令即可: CONFIG SET latency-monitor-threshold
EVENT NOTIFICATION(TODO 事件通知)
1 | ############################ EVENT NOTIFICATION ############################## |
ADVANCED CONFIG (TODO 高级设置)
1 |
|