Redis4.0.2配置文件详解

    xiaoxiao2022-07-03  139

    ###########################单位############################### # 当你需要为某个配置项指定内存大小的时候,必须要带上单位, # 通常的格式就是 1k 5gb 4m 等: # 1k => 1000 bytes # 1kb => 1024 bytes # 1m => 1000000 bytes # 1mb => 10241024 bytes # 1g => 1000000000 bytes # 1gb => 10241024*1024 bytes ###########################文件引入############################## # 引入其他的配置文件 # include /path/to/local.conf # include /path/to/other.conf ###########################模块加载############################## # 启动时加载模块 # loadmodule /path/to/my_module.so # loadmodule /path/to/other_module.so ###########################网络################################## # 默认情况下,redis 在 server 上所有有效的网络接口上监听客户端连接。 # 你如果只想让它在一个网络接口上监听,那你就绑定一个IP或者多个IP。 # 示例,多个IP用空格隔开: # bind 192.168.0.1 10.0.0.1 bind 127.0.0.1 # 是否开启保护模式。如果没有指定bind和密码,redis只会本地进行访问,拒绝外部访问。 protected-mode yes # 默认端口,建议生产环境不要使用默认端口避免被恶意扫描到 port 6379 # TCP连接中已完成队列(完成三次握手之后)的长度 tcp-backlog 511 # 指定 unix socket 的路径。 #unixsocket /tmp/redis.sock # 配置unix socket使用文件的权限 #unixsocketperm 700 # 指定在一个 client 空闲多少秒之后关闭连接(0 就是不管它) timeout 0 # tcp keepalive参数 tcp-keepalive 300 ###########################基本配置############################## # 默认情况下 redis 不是作为守护进程运行的,如果你想让它在后台运行,你就把它改成 yes。 daemonize no # 可以通过upstart和systemd管理Redis守护进程 # 选项: # supervised no - 没有监督互动 # supervised upstart - 通过将Redis置于SIGSTOP模式来启动信号 # supervised systemd - signal systemd将READY = 1写入$ NOTIFY_SOCKET # supervised auto - 检测upstart或systemd方法基于 UPSTART_JOB或NOTIFY_SOCKET环境变量 supervised no # 配置PID文件路径 pidfile /var/run/redis_6379.pid # 定义日志级别。 # 可以是下面的这些值: # debug (适用于开发或测试阶段) # verbose (many rarely useful info, but not a mess like the debug level) # notice (适用于生产环境) # warning (仅仅一些重要的消息被记录) loglevel notice # 指定日志文件的位置 logfile “” # 要想把日志记录到系统日志,就把它改成 yes, # 也可以可选择性的更新其他的syslog 参数以达到你的要求 # syslog-enabled no # 设置 syslog 的 identity。 #syslog-ident redis # 设置 syslog 的 facility,必须是 USER 或者是 LOCAL0-LOCAL7 之间的值。 #syslog-facility local0 # 设置数据库的数目。 # 默认数据库是 DB 0,你可以在每个连接上使用 select <dbid> 命令选择一个不同的数据库。 # 但是 dbid 必须是一个介于 0 到 databasees - 1 之间的值。 databases 16 # 是否一直显示logo always-show-logo yes ###########################数据持久化RDB######################### # 存 DB 到磁盘: # # 格式:save <间隔时间(秒)> <写入次数> # # 根据给定的时间间隔和写入次数将数据保存到磁盘 # # 下面的例子的意思是: # 900 秒后如果至少有 1 个 key 的值变化,则保存 # 300 秒后如果至少有 10 个 key 的值变化,则保存 # 60 秒后如果至少有 10000 个 key 的值变化,则保存 # # 注意:你可以注释掉所有的 save 行来停用保存功能。 # 也可以直接一个空字符串来实现停用: # save "" # 默认情况下,如果 redis 最后一次的后台保存失败,redis 将停止接受写操作, # 这样以一种强硬的方式让用户知道数据不能正确的持久化到磁盘, # 否则就会没人注意到灾难的发生。 # # 如果后台保存进程重新启动工作了,redis 也将自动的允许写操作。 # # 然而你要是安装了靠谱的监控,你可能不希望 redis 这样做,那你就改成 no 好了。 stop-writes-on-bgsave-error yes # 是否在 dump .rdb 数据库的时候使用 LZF 压缩字符串 # 默认都设为 yes # 如果你希望保存子进程节省点 cpu ,你就设置它为 no , # 不过这个数据集可能就会比较大 rdbcompression yes # 是否校验rdb文件 rdbchecksum yes # 设置 dump 的文件名称 dbfilename dump.rdb # 工作目录 # 例如上面的 dbfilename 只指定了文件名, # 但是它会写入到这个目录下。这个配置项一定是个目录,而不能是文件名。 dir ./ ###########################主从复制######################### # 主从复制。使用 slaveof 来让一个 redis 实例成为另一个reids 实例的副本。 # 注意这个只需要在 slave 上配置。 # # slaveof <masterip> <masterport> # 如果 master 需要密码认证,就在这里设置 # masterauth <master-password> # 当一个slave失去和master的连接,或者同步正在进行中,slave的行为有两种可能: # 如果 slave-serve-stale-data 设置为 “yes” (默认值),slave会继续响应客户端请求,可能是正常数据,也可能是还没获得值的空数据。 # 如果 slave-serve-stale-data 设置为 “no”,slave会回复"正在从master同步(SYNC with master in progress)"来处理各种请求,除了 INFO 和 SLAVEOF 命令。 slave-serve-stale-data yes # 配置从是否为只读,开启后从则不能写入数据 # 从 redis 2.6 版起,默认 slaves 都是只读的。 slave-read-only yes # 同步策略: 磁盘或socket,默认磁盘方式 repl-diskless-sync no # 如果非磁盘同步方式开启,可以配置同步延迟时间,以等待master产生子进程通过socket传输RDB数据给slave。 # 默认值为5秒,设置为0秒则每次传输无延迟。 repl-diskless-sync-delay 5 # slave根据指定的时间间隔向master发送ping请求。默认10秒。 # repl-ping-slave-period 10 # 同步的超时时间 # slave在与master SYNC期间有大量数据传输,造成超时 # 在slave角度,master超时,包括数据、ping等 # 在master角度,slave超时,当master发送REPLCONF ACK pings#确保这个值大于指定的repl-ping-slave-period,否则在主从间流量不高时每次都会检测到超时 # repl-timeout 60 # 是否在slave套接字发送SYNC之后禁用 TCP_NODELAY # 如果选择yes,Redis将使用更少的TCP包和带宽来向slaves发送数据。但是这将使数据传输到slave上有延迟,Linux内核的默认配置会达到40毫秒。 # 如果选择no,数据传输到salve的延迟将会减少但要使用更多的带宽。 # 默认我们会为低延迟做优化,但高流量情况或主从之间的跳数过多时,可以设置为“yes”。 repl-disable-tcp-nodelay no # 设置主从复制容量大小。这个 backlog 是一个用来在 slaves 被断开连接时 # 存放 slave 数据的 buffer,所以当一个 slave 想要重新连接,通常不希望全部重新同步, # 只是部分同步就够了,仅仅传递 slave 在断开连接时丢失的这部分数据。 # 这个值越大,salve 可以断开连接的时间就越长。 # repl-backlog-size 1mb # 从最后一个slave断开开始计时多少秒后,backlog缓冲将会释放。 # 如果设置为 0 ,意味着绝不释放 backlog 。 # repl-backlog-ttl 3600 # 当 master 不能正常工作的时候,Redis Sentinel 会从 slaves 中选出一个新的 master, # 这个值越小,就越会被优先选中,但是如果是 0 , 那是意味着这个 slave 不可能被选中。 # # 默认优先级为 100。 slave-priority 100 # 如果master少于N个延时小于等于M秒的已连接slave,就可以停止接收写操作。 # N个slave需要是“oneline”状态。 # 延时是以秒为单位,并且必须小于等于指定值,是从最后一个从slave接收到的ping(通常每秒发送)开始计数。 # 该选项不保证N个slave正确同步写操作,但是限制数据丢失的窗口期。 # 例如至少需要3个延时小于等于10秒的slave用下面的指令: # min-slaves-to-write 3 # min-slaves-max-lag 10 ###########################安全########################################### #密码 # requirepass foobared # 命令重命名 # 设置命令为空时禁用命令 # rename-command CONFIG "" ###########################客户端########################################## # 设置最多同时连接的客户端数量 # 一旦达到最大限制,redis 将关闭所有的新连接 # 并发送一个‘max number of clients reached’的错误。 # maxclients 10000 ###########################内存管理######################################## # 最大使用内存 # maxmemory <bytes> # 如果达到上方最大的内存限制,Redis如何选择删除key # volatile-lru -> 根据LRU算法删除设置过期时间的key # allkeys-lru -> 根据LRU算法删除任何key # volatile-random -> 随机移除设置过过期时间的key # allkeys-random -> 随机移除任何key # volatile-ttl -> 移除即将过期的key(minor TTL) # noeviction -> 不移除任何key,只返回一个写错误 # 注意:对所有策略来说,如果Redis找不到合适的可以删除的key都会在写操作时返回一个错误。 # 目前为止涉及的命令:set setnx setex append incr decr rpush lpush rpushx lpushx linsert lset rpoplpush sadd sinter sinterstore sunion sunionstore sdiff sdiffstore zadd zincrby zunionstore zinterstore hset hsetnx hmset hincrby incrby decrby getset mset msetnx exec sort # maxmemory-policy noeviction # LRU和最小TTL算法的样本个数 # maxmemory-samples 5 ###########################懒删除######################################## # 内存满逐出 lazyfree-lazy-eviction no # 过期key删除 lazyfree-lazy-expire no # 内部删除,比如rename oldkey newkey时,如果newkey存在需要删除newkey lazyfree-lazy-server-del no # 接收完RDB文件后清空数据选项 replica-lazy-flush no ###########################持久化方式AOF################################## # 是否开启aof持久化,默认不开启 # 每次启动时Redis都会先把这个文件的数据读入内存里,先忽略RDB文件 appendonly no # aof文件名称 appendfilename "appendonly.aof" # fsync() 系统调用告诉操作系统把数据写到磁盘上,而不是等更多的数据进入输出缓冲区。 # 有些操作系统会真的把数据马上刷到磁盘上;有些则会尽快去尝试这么做。 # Redis支持三种不同的模式: # no:不要立刻刷,只有在操作系统需要刷的时候再刷。比较快。 # always:每次写操作都立刻写入到aof文件。慢,但是最安全。 # everysec:每秒写一次。折中方案。 # 默认的 “everysec” 通常来说能在速度和数据安全性之间取得比较好的平衡。 appendfsync everysec # 如果AOF的同步策略设置成 “always” 或者 “everysec”,并且后台的存储进程(后台存储或写入AOF 日志)会产生很多磁盘I/O开销。某些Linux的配置下会使Redis因为 fsync()系统调用而阻塞很久。 # 注意,目前对这个情况还没有完美修正,甚至不同线程的 fsync() 会阻塞我们同步的write(2)调用。 # 为了缓解这个问题,可以用下面这个选项。它可以在 BGSAVE 或 BGREWRITEAOF 处理时阻止fsync()。 # 这就意味着如果有子进程在进行保存操作,那么Redis就处于"不可同步"的状态。 # 这实际上是说,在最差的情况下可能会丢掉30秒钟的日志数据。(默认Linux设定) # 如果把这个设置成"yes"带来了延迟问题,就保持"no",这是保存持久数据的最安全的方式。 no-appendfsync-on-rewrite no # 自动重写AOF文件。如果AOF日志文件增大到指定百分比,Redis能够通过 BGREWRITEAOF 自动重写AOF日志文件。 # 工作原理:Redis记住上次重写时AOF文件的大小(如果重启后还没有写操作,就直接用启动时的AOF大小) # 这个基准大小和当前大小做比较。如果当前大小超过指定比例,就会触发重写操作。 # 你还需要指定被重写日志的最小尺寸,这样避免了达到指定百分比但尺寸仍然很小的情况还要重写。 # 指定百分比为0会禁用AOF自动重写特性。 auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb # 如果设置为yes,如果一个因异常被截断的AOF文件被redis启动时加载进内存,redis将会发送日志通知用户 # 如果设置为no,redis将会拒绝启动。此时需要用"redis-check-aof"工具修复文件。 aof-load-truncated yes # 加载时Redis是否识别出AOF文件以“REDIS”开头字符串,并加载带此前缀的RDB文件,然后继续加载AOF aof-use-rdb-preamble no ###########################LUA脚本################################## # Lua 脚本的最大执行毫秒数 lua-time-limit 5000 ###########################REDIS 集群################################## # 启用或停用集群 # cluster-enabled yes # 配置redis自动生成的集群配置文件名。确保同一系统中运行的各redis实例该配置文件不要重名。 # cluster-config-file nodes-6379.conf # 集群节点超时毫秒数 # cluster-node-timeout 15000 # 如果数据太旧,集群中的不可用master的slave节点会避免成为备用master。如果slave和master失联时间超过:(node-timeout * slave-validity-factor) + repl-ping-slave-period则不会被提升为master。 # 如node-timeout为30秒,slave-validity-factor为10, 默认default repl-ping-slave-period为10秒,失联时间超过310秒slave就不会成为master。 # 较大的slave-validity-factor值可能允许包含过旧数据的slave成为master,同时较小的值可能会阻止集群选举出新master。 # 为了达到最大限度的高可用性,可以设置为0,即slave不管和master失联多久都可以提升为master # cluster-slave-validity-factor 10 # 只有在之前master有其它指定数量的工作状态下的slave节点时,slave节点才能提升为master。默认为1(即该集群至少有3个节点,1 master+2 slaves,master宕机,仍有另外1个slave的情况下其中1个slave可以提升) # 测试环境可设置为0,生成环境中至少设置为1 # cluster-migration-barrier 1 # 默认情况下如果redis集群如果检测到至少有1个hash slot不可用,集群将停止查询数据。 # 如果所有slot恢复则集群自动恢复。 # 如果需要集群部分可用情况下仍可提供查询服务,设置为no。 # cluster-require-full-coverage yes ###########################Docker集群配置################################## # 默认情况下,Redis会自动检测自己的IP和从配置中获取绑定的PORT,告诉客户端或者是其他节点。 # 而在Docker环境中,如果使用的不是host网络模式,在容器内部的IP和PORT都是隔离的,那么客户端和其他节点无法通过节点公布的IP和PORT建立连接。 # 如果开启以下配置,Redis节点会将配置中的这些IP和PORT告知客户端或其他节点。而这些IP和PORT是通过Docker转发到容器内的临时IP和PORT的。 # cluster-announce-ip 10.1.1.5 # cluster-announce-port 6379 # 集群总线端口 # cluster-announce-bus-port 6380 ###########################慢查询日志################################## #记录超过多少微秒的查询命令 #1000000等于1秒,设置为0则记录所有命令 slowlog-log-slower-than 10000 #记录大小,可通过SLOWLOG RESET命令重置 slowlog-max-len 128 ###########################延时监控系统################################## # 记录执行时间大于或等于预定时间(毫秒)的操作,为0时不记录 latency-monitor-threshold 0 ###########################时间通知##################################### # Redis能通知 Pub/Sub 客户端关于键空间发生的事件,默认关闭 notify-keyspace-events "" ###########################高级配置##################################### # 当hash只有少量的entry时,并且最大的entry所占空间没有超过指定的限制时,会用一种节省 内存的数据结构来编码。可以通过下面的指令来设定限制 hash-max-ziplist-entries 512 hash-max-ziplist-value 64 # 当取正值的时候,表示按照数据项个数来限定每个quicklist节点上的ziplist长度。比如,当这个参数配置 # 成5的时候,表示每个quicklist节点的ziplist最多包含5个数据项。 # 当取负值的时候,表示按照占用字节数来限定每个quicklist节点上的ziplist长度。这时,它只能取-1到-5 # 这五个值,每个值含义如下: # -5: 每个quicklist节点上的ziplist大小不能超过64 Kb。(注:1kb => 1024 bytes) # -4: 每个quicklist节点上的ziplist大小不能超过32 Kb。 # -3: 每个quicklist节点上的ziplist大小不能超过16 Kb。 # -2: 每个quicklist节点上的ziplist大小不能超过8 Kb。(-2是Redis给出的默认值) # -1: 每个quicklist节点上的ziplist大小不能超过4 Kb。 list-max-ziplist-size -2 # 这个参数表示一个quicklist两端不被压缩的节点个数。 # 注:这里的节点个数是指quicklist双向链表的节点个数,而不是指ziplist里面的数据项个数。 # 实际上,一个quicklist节点上的ziplist,如果被压缩,就是整体被压缩的。 # 参数list-compress-depth的取值含义如下: # 0: 是个特殊值,表示都不压缩。这是Redis的默认值。 # 1: 表示quicklist两端各有1个节点不压缩,中间的节点压缩。 # 2: 表示quicklist两端各有2个节点不压缩,中间的节点压缩。 # 3: 表示quicklist两端各有3个节点不压缩,中间的节点压缩。 # 依此类推… # 由于0是个特殊值,很容易看出quicklist的头节点和尾节点总是不被压缩的,以便于在表的两端进行快速存取。 list-compress-depth 0 # set有一种特殊编码的情况:当set数据全是十进制64位有符号整型数字构成的字符串时。 # 下面这个配置项就是用来设置set使用这种编码来节省内存的最大长度。 set-max-intset-entries 512 # 与hash和list相似,有序集合也可以用一种特别的编码方式来节省大量空间。 # 这种编码只适合长度和元素都小于下面限制的有序集合 zset-max-ziplist-entries 128 zset-max-ziplist-value 64 # HyperLogLog稀疏结构表示字节的限制。该限制包括 # 16个字节的头。当HyperLogLog使用稀疏结构表示 # 这些限制,它会被转换成密度表示。 # 值大于16000是完全没用的,因为在该点 # 密集的表示是更多的内存效率。 # 建议值是3000左右,以便具有的内存好处, 减少内存的消耗 hll-sparse-max-bytes 3000 # 启用哈希刷新,每100个CPU毫秒会拿出1个毫秒来刷新Redis的主哈希表(顶级键值映射表) activerehashing yes # 客户端的输出缓冲区的限制,可用于强制断开那些因为某种原因从服务器读取数据的速度不够快的客户端 client-output-buffer-limit normal 0 0 0 client-output-buffer-limit slave 256mb 64mb 60 client-output-buffer-limit pubsub 32mb 8mb 60 # 默认情况下,“hz”的被设定为10。提高该值将在Redis空闲时使用更多的CPU时,但同时当有多个key # 同时到期会使Redis的反应更灵敏,以及超时可以更精确地处理 hz 10 # 当一个子进程重写AOF文件时,如果启用下面的选项,则文件每生成32M数据会被同步 aof-rewrite-incremental-fsync yes ###########################活动碎片整##################################### # 启用主动碎片整理 # activedefrag yes # 启动活动碎片整理的最小碎片浪费量 # active-defrag-ignore-bytes 100mb # 启动碎片整理的最小碎片百分比 # active-defrag-threshold-lower 10 # 使用最大消耗时的最大碎片百分比 # active-defrag-threshold-upper 100 # 在CPU百分比中进行碎片整理的最小消耗 # active-defrag-cycle-min 25 # 磁盘碎片整理的最大消耗 # active-defrag-cycle-max 75

    参考文章: https://cloud.tencent.com/developer/article/1423727

    最新回复(0)