说明:
redis_version:5.0.3
以下配置通过config get *获取,第一行是key,第二行是对应的值,文字是对应的配置说明。
写的有些凌乱,这些个配置查了3天多的时间,太多了也了解的不细,留个记录大概了解下信息到时候使用。
- “dbfilename” #本地数据库文件
- “dump.rdb”
- “requirepass” #密码
- “zxxx”
- “masterauth” #从节点访问master的密码
- “zxxx”
- “cluster-announce-ip” #本实例ip,当ip变化时可通知所有节点包括自己,例如docker环境下 待定
- “”
- “unixsocket” #unix socket开启的参数,提高速度,tcp更安全些 待定
- “”
- “logfile” #日志文件位置 待定
- “”
- “pidfile” #pid文件位置 待定
- “”
- “slave-announce-ip” #而redis主从节点间通信时,是基于INFO命令的信息来自动发现从节点的ip和端口信息,docker环境下容器内ip和真实使用ip不同时会有问题。从节点上报给master的自己ip,防止nat问题。
- “”
- “replica-announce-ip” #从节点上报给master的自己ip,防止nat问题
- “”
- “maxmemory” #最大可用物理内存。0表示不做限制
- “0”
- “proto-max-bulk-len” #批量请求通常限制在 512 mb 内,可以通过修改 proto-max-bulk-len 选项改变这个限制。
- “536870912”
- “client-query-buffer-limit” #每个Client都有一个query buffer(查询缓存区或输入缓存区), 它用于保存客户端的发送命令,redis server从query buffer获取命令并执行。如果程序的Key设计不合理,客户端使用大量的query buffer,这会导致redis server比较危险,很容易达到maxmeory限制,导致缓存数据被清空、数据无法写入和oom.
- “1073741824”
- “maxmemory-samples”
- “5”
#Redis在进行LRU算法清理数据时,需要对多个key进行采样,选出采样key中最近使用最少的key进行数据清理,maxmemory-sample选项就是用来配置采样大小的。Redis给出了3\5\10三个可配置的值,配置为3执行LRU速度更快,但是精确率不高,5是一个速度和精确率适中的配置,10使得LRU算法精确率更高,但是会消耗更多的CPU
#http://www.forwardlee.com/2018/06/14/Redis-LRU%E7%AE%97%E6%B3%95%E8%AF%A6%E6%83%85/ - “lfu-log-factor”
- “10”
#key清除策略,清除不经常访问的key。key访问量对应记录值的增长速度,该值越大,增长速度越慢。
#https://leaderli.github.io/2020/05/22/redis-%E6%B8%85%E9%99%A4%E7%AD%96%E7%95%A5/ - “lfu-decay-time”
- “1”
#redis 每分钟会计算 key 是否被访问过,若没有则将 key 的最近访问次数减去一个系数,这个系数根据配置lfu-decay-time 1来控制 - “timeout”
- “0”
#指定在一个 client 空闲多少秒之后关闭连接(0 就是不管它) - “active-defrag-threshold-lower”
- “10”
#当碎片超过 10% 时,开启内存碎片整理
#https://zhuanlan.zhihu.com/p/67381368 - “active-defrag-threshold-upper”
- “100”
#内存碎片超过 100%,则尽最大努力整理 - “active-defrag-ignore-bytes”
- “104857600”
#当碎片达到 100mb 时,开启内存碎片整理 - “active-defrag-cycle-min”
- “5”
#内存自动整理占用资源最小百分比 - “active-defrag-cycle-max”
- “75”
#内存自动整理占用资源最大百分比
#我们通过active-defrag-ignore-bytes和active-defrag-threshold-lower来控制是否进行内存碎片整理,通过active-defrag-cycle-min和active-defrag-cycle-max来控制整理内存碎片的力度。 - “active-defrag-max-scan-fields”
- “1000”
#最大努力进行碎片整理时使用多少 CPU 时间。 - “auto-aof-rewrite-percentage”
- “100”
#当前AOF文件大小是上次日志重写得到AOF文件大小的二倍(设置为100)时,自动启动新的日志重写过程。 - “auto-aof-rewrite-min-size”
- “67108864”
#设置允许重写的最小aof文件大小,避免了达到约定百分比但尺寸仍然很小的情况还要重写。 - “hash-max-ziplist-entries”
- “512”
#当hash中的数据项(即field-value对)的数目超过512的时候,也就是ziplist数据项超过1024的时候,会切换的Dict编码
#redis Hashes是由ziplist(压缩列表)和字典(Dict)两种编码方式实现. - “hash-max-ziplist-value”
- “64”
#表示当hash中的value长度超过64的时候转为dict。ziplist变得很大的时候的会有缺点。 - “stream-node-max-bytes”
- “4096”
#每个宏节点占用的内存容量上限为4096 Bytes。 - “stream-node-max-entries”
- “100”
#每个宏节点储存100个Stream条目。 - “list-max-ziplist-size”
- “-2”
#-2: 每个quicklist节点上的ziplist大小不能超过8 Kb。(-2是Redis给出的默认值)
#当取正值的时候,表示按照数据项个数来限定每个quicklist节点上的ziplist长度。每个quicklist节点上的ziplist越短,则内存碎片越多。 - “list-compress-depth”
- “0”
#2: 表示quicklist两端各有2个节点不压缩,中间的节点压缩。 0表示不压缩 - “set-max-intset-entries”
- “512”
#如果set中整型元素的数量不超过512时,Redis将会采用该特殊编码。超过了采用另外一种编码方式,占用内存会也变大。 - “zset-max-ziplist-entries”
- “128”
#元素数量小于128个 - “zset-max-ziplist-value”
- “64”
#所有member的长度都小于64字节
#同时满足以下条件时使用ziplist编码 - “hll-sparse-max-bytes”
- “3000”
#value大小小于等于hll-sparse-max-bytes使用稀疏数据结构(sparse),大于hll-sparse-max-bytes使用稠密的数据结构(dense) - “lua-time-limit”
- “5000”
#Lua 脚本的最大正常执行时间: - “slowlog-log-slower-than”
- “10000”
#默认值为10000,即10毫秒。当值等于0时,会记录所有的命令。当值设置为小于0时,任何命令都不会记录; - “latency-monitor-threshold”
- “0”
#延迟监控,默认关闭,单位毫秒。
#如果基于Redis的应用能接受的最大延迟是100毫秒,则延迟阀值应当设置为大于或等于100毫秒,以便记录所有阻塞Redis服务器的事件。 - “slowlog-max-len”
- “128”
#设置慢查询命令对应的日志显示长度,单位:命令数 - “port”
- “6379”
- “cluster-announce-port”
- “0”
#集群节点映射端口。解决docker环境下nat模式不通的问题。cluster-announce-ip 是宿主机的ip。 - “cluster-announce-bus-port”
- “0”
#集群总线端口。集群实例间通信。
#Redis集群中每个redis实例(可能一台机部署多个实例)会使用两个Tcp端口,一个用于给客户端(redis-cli或应用程序等)使用的端口,另一个是用于集群中实例相互通信的内部总线端口,且第二个端口比第一个端口一定大10000.内部总线端口通信使用特殊协议,以便实现集群内部高带宽低时延的数据交换。所以配置redis实例时只需要指明第一个端口就可以了。 - “tcp-backlog”
- “511”
#此参数确定了TCP连接中已完成队列(完成三次握手之后)的长度, 当然此值必须不大于Linux系统定义的/proc/sys/net/core/somaxconn值,默认是511,而Linux的默认参数值是128。当系统并发量大并且客户端速度缓慢的时候,可以将这二个参数一起参考设定。
#由于Redis的单线程模型(对命令的处理和连接的处理都是在一个线程中),如果存在慢查询的话,会出现上面的这种情况,造成新的accept的连接进不了队列。 - “databases”
- “16”
#数据库总数 - “repl-ping-slave-period”
- “10”
#SLAVE -> MASTER间的心跳间隔,单位秒。 - “repl-ping-replica-period”
- “10”
#同上,slave 改成了replica - “repl-timeout”
- “60”
#定义多长时间内均PING不通时,判定心跳超时。 单位秒。 - “repl-backlog-size”
- “1048576”
#当有副本服务器断开后,主服务器就开始累积未同步数据到缓冲区;默认1MB
#http://mdba.cn/2015/03/17/redis%e4%b8%bb%e4%bb%8e%e5%a4%8d%e5%88%b6%ef%bc%882%ef%bc%89-replication-buffer%e4%b8%8ereplication-backlog/
#https://blog.csdn.net/qq13398600329/article/details/106724590 - “repl-backlog-ttl”
- “3600”
##master没有slave一段时间会释放复制缓冲区的内存,repl-backlog-ttl用来设置该时间长度。单位为秒。 - “maxclients”
- “10000”
#redis允许的最大连接数 - “watchdog-period”
- “0”
#CONFIG SET watchdog-period 500 运行时间超过500毫秒的操作将会被记录下来。0 表示关闭。不推荐开启。 - “slave-priority”
- “100”
#优先级,值越低,优先级就越高。
#如果slave priority相同,那么看replica offset,哪个slave复制了越多的数据,offset越靠后,优先级就越高
#如果上面两个条件都相同,那么选择一个run id比较小的那个slave - “replica-priority”
- “100”
#同上,slave改成了replica - “slave-announce-port”
- “0”
#从节点上报给master的自己端口,防止nat问题 - “replica-announce-port”
- “0”
##从节点上报给master的自己端口,防止nat问题
##min-slaves-to-write和min-slaves-max-lag两个选项可以防止主服务器在不安全的情况下执行写命令
109) “min-slaves-to-write”
110) “0”
111) “min-replicas-to-write”
112) “0”
#如果设置成3,表示从服务器的数量少于3个,主服务器将拒绝执行写命令
- “min-slaves-max-lag”
- “10”
- “min-replicas-max-lag”
- “10”
#服务器的延迟(lag)值都大于或等于10秒时,主服务器将拒绝执行写命令, - “hz”
- “10”
#每隔一段时间执行一次删除(在redis.conf配置文件设置hz,1s刷新的频率)过期key操作
#默认为10 (即1秒执行10次,100ms一次,值越大说明刷新频率越快,最Redis性能损耗也越大) - “cluster-node-timeout”
- “15000”
#集群超时时间,节点超过这个时间没反应就断定是宕机,单位毫秒。 - “cluster-migration-barrier”
- “1”
#master的slave数量大于该值,slave才能迁移到其他孤立master上,主节点需要保持连接的备份节点的最小数量. - “cluster-slave-validity-factor”
- “10”
##控制从节点FailOver相关的设置 设为0,从节点会一直尝试启动FailOver. 设为正数,失联大于一定时间(factor*节点TimeOut),不再进行FailOver - “cluster-replica-validity-factor”
- “10”
#同上。5.0以后是这个参数。 - “repl-diskless-sync-delay”
- “5”
#diskless复制的延迟时间,一旦复制开始,节点不会再接收新slave的复制请求直到下一个rdb传输,最好等待一段时间,等更多的slave连上再开始复制 - “tcp-keepalive”
- “300”
#指定TCP连接是否为长连接,”侦探”信号由server端维护,长连接将会额外的增加server端的开支
#默认为0.表示禁用,非0值表示开启”长连接” . 单位是秒,推荐60s。 - “cluster-require-full-coverage”
- “yes”
#默认情况下,集群全部的slot有节点负责,集群状态才为ok,才能提供服务。设置为no,可以在slot没有全部分配的时候提供服务。
#集群不完整仍然需要对外提供服务 就设置为no - “cluster-slave-no-failover”
- “no”
- “cluster-replica-no-failover”
- “no”
- “no-appendfsync-on-rewrite”
- “no”
#如果应用系统无法忍受延迟,而可以容忍少量的数据丢失,则设置为yes。如果应用系统无法忍受数据丢失,则设置为no。 - “slave-serve-stale-data”
- “yes”
#yes,主从复制中,从服务器可以响应客户端请求;
#no,主从复制中,从服务器将阻塞所有请求,有客户端请求时返回“SYNC with master in progress”; - “replica-serve-stale-data”
- “yes”
#同上。 - “slave-read-only”
- “yes”
#slave是否只读 - “replica-read-only”
- “yes”
#同上。 - “slave-ignore-maxmemory”
- “yes”
- “replica-ignore-maxmemory”
- “yes”
- “stop-writes-on-bgsave-error”
- “yes”
#如果持久化出错,主进程是否停止写入 - “daemonize”
- “no”
#是否后台运行。容器中不能后台运行 - “rdbcompression”
- “yes”
#指定存储至本地数据库时是否压缩数据,默认为yes,Redis采用LZF压缩,如果为了节省CPU时间,可以关闭该选项,但会导致数据库文件变的巨大 - “rdbchecksum”
- “yes”
#是否开启RDB文件的校验,在写入文件和读取文件时都起作用;关闭checksum在写入文件和启动文件时大约能带来10%的性能提升,但是数据损坏时无法发现 - “activerehashing”
- “yes”
#yes,以便能够尽可能快的释放内存。会对请求有2毫秒的延迟,每100毫秒时使用1毫秒的CPU时间来对redis的hash表进行重新hash - “activedefrag”
- “no”
#开启自动内存碎片整理(总开关) - “protected-mode”
- “no”
redis3.2版本后新增protected-mode配置,默认是yes,即开启。设置外部网络连接redis服务,设置方式如下:
1、关闭protected-mode模式,此时外部网络可以直接访问
2、开启protected-mode保护模式,需配置bind ip或者设置访问密码
https://www.cnblogs.com/wllcs/p/13129175.html - “repl-disable-tcp-nodelay”
- “no”
配置关闭:主节点产生的数据无论大小都会及时的发送给从节点。redis默认关闭此配置,以保障较小的主从延迟。当然,这需要主从间保持较好的网络状况。
配置打开:主节点会合并较小的TCP数据包以节省宽带,默认发送时间间隔由linux内核设置决定,默认一般40ms。虽然这样大大增加了主从之间的延迟,但是对于网络状况达不到条件或者对主从延迟不敏感的情况比较适用。 - “repl-diskless-sync”
- “no”
#默认不使用diskless同步方式
一个RDB文件从master端传到slave端,分为两种情况:
1、支持disk:master端将RDB file写到disk,稍后再传送到slave端;
2、无磁盘diskless:master端直接将RDB file传到slave socket,不需要与disk进行交互。
无磁盘diskless方式适合磁盘读写速度慢但网络带宽非常高的环境。 - “aof-rewrite-incremental-fsync”
- “yes”
##当 aof rewrite 的时候开启32MB数据,刷一次盘 - “rdb-save-incremental-fsync”
- “yes”
#RDB自动触发策略是否启用,默认为yes
#当 Redis 保存 RDB 文件时,如果启用了 rdb-save-incremental-fsync 功能, Redis 会每生成 32 MB 数据就执行一次 fsync 操作。 通过这种方式将数据分批提交到硬盘可以避免高延迟峰值。 - “aof-load-truncated”
- “yes”
#Redis 在恢复时会忽略最后一条可能存在问题的指令,默认为 yes。即在 AOF 写入时,可能存在指令写错的问题(突然断电、写了一半),这种情况下 yes 会 log 并继续,而 no 会直接恢复失败。 - “aof-use-rdb-preamble”
- “yes”
#开启了aof 默认的会使用混合持久化。如果要使用单纯的aof 则需要手动的 将 aof-use-rdb-preamble 设为 no (好坑) - “lazyfree-lazy-eviction”
- “no”
#针对redis内存使用达到maxmeory,并设置有淘汰策略时;在被动淘汰键时,是否采用lazy free机制;
因为此场景开启lazy free, 可能使用淘汰键的内存释放不及时,导致redis内存超用,超过maxmemory的限制。 - “lazyfree-lazy-expire”
- “no”
#表示设置了过期时间的键值,当过期之后是否开启 lazy free 机制删除. - “lazyfree-lazy-server-del”
- “no”
#有些指令在处理已存在的键时,会带有一个隐式的 del 键的操作,比如 rename 命令,当目标键已存储,Redis 会先删除目标键,如果这些目标键是一个 big key, 就会造成阻塞删除的问题,此配置表示在这种场景中是否开启 lazy free 机制删除. - “slave-lazy-flush”
- “no”
#针对 slave(从节点) 进行全量数据同步,slave 在加载 master 的 RDB 文件前,会运行 flushall 来清理自己的数据,它表示此时是否开启 lazy free 机制删除。 - “replica-lazy-flush”
- “no”
#同上。 - “dynamic-hz”
- “yes”
#yes表示开启动态的执行定时删除过期key动作。 并分离了实际hz(hz)和已设置的hz(configured_hz)。
#当动态hz开启时,您设置的hz参数的值,即configured_hz,将作为基线值,而Redis服务中的实际hz值会在基线值的基础上根据已连接到Redis的客户端数量自动调整,连接的客户端越多,实际hz值越高,Redis执行定期任务的频率就越高。 - “maxmemory-policy”
- “noeviction”
#则当redis内存数据达到maxmemory时,会根据maxmemory-policy配置来淘汰内存数据,以避免OOM。
redis提供了以下6种淘汰策略:
1,noeviction:不执行任何淘汰策略,当达到内存限制的时候客户端执行命令会报错。
2,allkeys-lru:从所有数据范围内查找到最近最少使用的数据进行淘汰,直到有足够的内存来存放新数据。
3,volatile-lru:从所有的最近最少访问数据范围内查找设置到过期时间的数据进行淘汰,如果查找不到数据,则回退到noeviction。
4,allkeys-random:从所有数据范围内随机选择key进行删除。
5,volatile-random:从设置了过期时间的数据范围内随机选择key进行删除。
6,volatile-ttl:从设置了过期时间的数据范围内优先选择设置了TTL的key进行删除。 - “loglevel”
- “notice”
#log 等级分为 4 级, debug, verbose, notice, 和 warning。生产环境下一般开启 notice - “supervised”
- “no”
#定义接管redis的方式,no表示没有监督互动。upstart,systemd ,auto ,no 4种。 - “appendfsync”
- “everysec”
#Redis会默认每隔一秒进行一次fsync调用,将缓冲区中的数据写到磁盘。
#设置为always,每一次写操作都会调用一次fsync,这时数据是最安全的,当然,由于每次都会执行fsync,所以其性能也会受到影响 - “syslog-facility”
- “local0”
#日志的类型可以是: user 用户 local0~local7 用户自定义 - “appendonly”
- “no”
#当前配置为appendonly no,即禁用了appendonly功能,这样的风险是一旦redis实例crash,重启后只能恢复到最近1次快照(即bgsave产生的rdb文件),可能会丢失很长时间的数据。
appendonly可以实现准实时刷盘,默认每1s将数据追加到磁盘文件,也可以配置成每次修改都刷盘,当redis crash时最大限度的保证数据完整性。 - “dir”
- “/data”
#指定本地数据库存放目录 - “save”
- “”
#RDB方案下的持久化设置。官方默认900秒内有1个更改,300秒内有10个更改以及60秒内有10000个更改,则将内存中的数据快照写入磁盘。 - “client-output-buffer-limit”
- “normal 0 0 0 slave 268435456 67108864 60 pubsub 33554432 8388608 60”
- “unixsocketperm”
- “0”
#unixsocket配置项来指定unix socket文件的路径,并通过unixsocketperm来指定文件的权限。 - “slaveof”
- “”
#将当前服务器转变为指定服务器的从属服务器 - “notify-keyspace-events”
- “”
#事件通知的设置,默认是关闭的。需要事件触发或者回调的可以开启对应的事件。 - “bind”
- “0.0.0.0”
#绑定的地址