Redis配置文件介绍
Redis在源码包中存放了一个Redis配置实例文件,文件中对各个配置点进行了简单的介绍,我也通过这个文件来对Redis的一些配置进行一些简单介绍。
一.UNITS(单位)【了解】
1.Redis服务如果要指定配置文件,则配置文件的路径必须作为第一参数。eg:redis-server /path/to/redis.conf
2.定义一些基本的度量单位,只支持bytes,不支持bit。
# 1k => 1000 bytes # 1kb => 1024 bytes # 1m => 1000000 bytes # 1mb => 1024*1024 bytes # 1g => 1000000000 bytes # 1gb => 1024*1024*1024 bytes
3.度量单位不区分大小写,1GB、1Gb、1gB等书写方式所代表的含义相同。
二.INCLUDES(包含)【了解】
1.可以用于包含(引入)一个或多个其他配置文件,eg:include /path/to/local.conf
2.最好将include书写在配置文件的开头,避免在运行时配置内容被覆盖。
三.MODULES(模块)【了解】
1.用于启动时加载模块。可以使用该命令加载多个模块。eg:loadmodule /path/to/my_module.so
四.NETWORK(网络)【熟悉】
1.bind:绑定本机可以接受访问的IP,如果未指定,则接受所有来自于可用网络接口的连接。
2.protected-mode:保护模式,避免在Internet上Redis实例被访问和利用,如果没有使用bind指令及设置密码则只接收本地连接。默认开启
3.port:端口,默认6379,如果指定为0,Redis将不会在TCP套接字上侦听。
4.tcp-backlog:TCP 监听的最大容纳数量,在高并发环境下需要一个高backlog值来避免慢客户端连接问题
5.unixsocket & unixsocketperm:指定将用于侦听的Unix套接字的路径及值,未指定时,Redis将不会在UNIX套接字上侦听。
6.timeout:客户端空闲N秒后关闭连接(0禁用)
7.tcp-keepalive:单位秒,每隔多少秒判断连接是否继续,推荐60
五.GENERAL(通用)【精通】
1.daemonize:Redis守护进程,默认为no,大多数需要改为yes
2.supervised:Redis监控
3.pidfile:指定PID文件路径
4.loglevel:指定日志记录级别
5.logfile:指定日志文件名
6.syslog-enabled:是否把日志输出到syslog中
7.syslog-ident:指定syslog里的日志标识
8.syslog-facility:指定syslog设备,值可以是USER或LOCAL0-LOCAL7
9.databases:设置数据库数。
10.always-show-logo:是否启动日志中的Logo。
六.SNAPSHOTTING(快照)【精通】
1.save:在给定秒数内执行了给定写入数将触发,把数据库保存到磁盘上。save 秒数 写操作次数,eg:save 300 10
2.stop-writes-on-bgsave-error:后台存储发生错误时禁止写入,默认为yes,如果不在乎数据不一致等问题,可以设置为no
3.rdbcompression:对于存储到磁盘的rdb快照是否启用lzf压缩存储,默认为yes,如果不想消耗cpu等资源来进行压缩,可以设置为no,但会导致快照文件变的巨大。
4.rdbchecksum:存储快照后,是否使用CRC64算法对rdb数据进行校验,会增大大约10%的性能消耗,默认为yes。如果希望获取最大的性能提升,可以设置为no。
5.dbfilename:设置rdb快照的文件名
6.dir:指定rdb快照的存储目录。
七.REPLICATION(主从)【精通】
1.slaveof:连接主库,slaveof 主库ip 主库端口 eg:slaveof 192.168.2.102 6379
2.masterauth:如果主库需要密码认证则需要在此处指定。
3.slave-serve-stale-data:Redis复制在 slave 这一端也是非阻塞的。如果为 yes ,slave 在执行同步时,它可以使用老版本的数据来处理查询请求,如果是 no ,slave 将返回一个错误。在完成同步后,slave 需要删除老数据,加载新数据,在这个阶段,slave 会阻止连接进来。
4.slave-read-only:从库数据是否只读
5.repl-diskless-sync:新的从站和重连后不能继续备份的从站,需要做所谓的“完全备份”,即将一个RDB文件从主站传送到从站。这个传送有以下两种方式:
1)硬盘备份:redis主站创建一个新的进程,用于把RDB文件写到硬盘上。过一会儿,其父进程递增地将文件传送给从站。
2)无硬盘备份:redis主站创建一个新的进程,子进程直接把RDB文件写到从站的套接字,不需要用到硬盘。
在硬盘备份的情况下,主站的子进程生成RDB文件。一旦生成,多个从站可以立即排成队列使用主站的RDB文件。在无硬盘备份的情况下,一次RDB传送开始,新的从站到达后,需要等待现在的传送结束,才能开启新的传送。
如果使用无硬盘备份,主站会在开始传送之间等待一段时间(可配置,以秒为单位),希望等待多个子站到达后并行传送。
在硬盘低速而网络高速(高带宽)情况下,无硬盘备份更好。
6.repl-diskless-sync-delay:无盘复制延时开始秒数,默认是5秒,意思是当PSYNC触发的时候,master延时多少秒开始向master传送数据流,以便等待更多的slave连接可以同时传送数据流,因为一旦PSYNC开始后,如果有新的slave连接master,只能等待下次PSYNC。可以配置为0取消等待,立即开始。
7.repl-ping-slave-period:slave会每隔repl-ping-slave-period(默认10秒)ping一次master,如果超过repl-timeout(默认 60秒)都没有收到响应,就会认为Master挂了。
8.repl-timeout:slave会每隔repl-ping-slave-period(默认10秒)ping一次master,如果超过repl-timeout(默认 60秒)都没有收到响应,就会认为Master挂了。
9.repl-disable-tcp-nodelay:是否在主从同步时是否禁用TCP_NODELAY。如果开启TCP_NODELAY,那么主redis会使用更少的TCP包和更少的带宽来向从redis传输数据。但是这可能会增加一些同步的延迟,大概会达到40毫秒左右。如果你关闭了TCP_NODELAY,那么数据同步的延迟时间会降低,但是会消耗更多的带宽。
10.repl-backlog-size:设置同步队列长度。队列长度(backlog)是主redis中的一个缓冲区,在与从redis断开连接期间,主redis会用这个缓冲区来缓存应该发给从redis的数据。这样的话,当从redis重新连接上之后,就不必重新全量同步数据,只需要同步这部分增量数据即可。
11.repl-backlog-ttl:如果主redis等了一段时间之后,还是无法连接到从redis,那么缓冲队列中的数据将被清理掉。我们可以设置主redis要等待的时间长度。如果设置为0,则表示永远不清理。默认是1个小时。
12.slave-priority:给众多的从redis设置优先级,在主redis持续工作不正常的情况,优先级高的从redis将会升级为主redis。而编号越小,优先级越高。比如一个主redis有三个从redis,优先级编号分别为10、100、25,那么编号为10的从redis将会被首先选中升级为主redis。当优先级被设置为0时,这个从redis将永远也不会被选中。默认的优先级为100。
13.min-slaves-to-write 3&min-slaves-max-lag 10:假如主redis发现有超过M个从redis的连接延时大于N秒,那么主redis就停止接受外来的写请求。这是因为从redis一般会每秒钟都向主redis发出PING,而主redis会记录每一个从redis最近一次发来PING的时间点,所以主redis能够了解每一个从redis的运行情况。
上面这个例子表示,假如有大于等于3个从redis的连接延迟大于10秒,那么主redis就不再接受外部的写请求。上述两个配置中有一个被置为0,则这个特性将被关闭。默认情况下min-slaves-to-write为0,而min-slaves-max-lag为10。
14.slave-announce-ip&slave-announce-port:常用于端口转发或NAT场景下,对Master暴露真实IP和端口信息。
八.SECURITY(安全)【精通】
1.requirepass:设置Redis实例密码
2.rename-command:禁用或重命名命令。eg:rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52
九.CLIENTS(客户机)【了解】
1.maxclients:设置最大连接数
十.MEMORY MANAGEMENT(内存管理)【熟悉】
1.maxmemory <bytes>:指定Redis最大内存限制。达到内存限制时,Redis将尝试删除已到期或即将到期的Key。
2.maxmemory-policy:Redis达到最大内存时将如何选择要删除的内容。
3.maxmemory-samples:设置样本数量,LRU算法 和 最小 TTL 算法都不是精准的算法,而是估算值,所以可以调整样本数量从而改变精确值,Redis默认会检查这么多个Key并选择其中LRU的那个。
十一.LAZY FREEING(惰性删除)【了解】
1.lazyfree-lazy-eviction:针对redis内存使用达到maxmeory,并设置有淘汰策略时,在被动淘汰键时,是否采用lazy free机制。因为此场景开启lazy free, 可能使用淘汰键的内存释放不及时,导致redis内存超用,超过maxmemory的限制。此场景使用时,请结合业务测试。
2.lazyfree-lazy-expire:针对设置有TTL的键,达到过期后,被redis清理删除时是否采用lazy free机制。此场景建议开启,因TTL本身是自适应调整的速度。
3.lazyfree-lazy-server-del:针对有些指令在处理已存在的键时,会带有一个隐式的DEL键的操作。如rename命令,当目标键已存在,redis会先删除目标键,如果这些目标键是一个big key,那就会引入阻塞删除的性能问题。 此参数设置就是解决这类问题,建议可开启。
4.slave-lazy-flush:针对slave进行全量数据同步,slave在加载master的RDB文件前,会运行flushall来清理自己的数据场景,参数设置决定是否采用异常flush机制。如果内存变动不大,建议可开启。可减少全量同步耗时,从而减少主库因输出缓冲区爆涨引起的内存使用增长。
十二.APPEND ONLY MODE(追加)【熟悉】
1.appendonly:是否开启AOF持久化
2.appendfilename:AOF文件名称
3.appendfsync:设置AOF文件同步策略。有3个可选值
4.no-appendfsync-on-rewrite:设置为yes表示rewrite期间对新写操作不fsync,暂时存在内存中,等rewrite完成后再写入,默认为no保证数据安全性
5.auto-aof-rewrite-percentage:aof文件增长比例,指当前aof文件比上次重写的增长比例大小。aof重写即在aof文件在一定大小之后,重新将整个内存写到aof文件当中,以反映最新的状态(相当于bgsave)。这样就避免了,aof文件过大而实际内存数据小的问题(频繁修改数据问题).
6.auto-aof-rewrite-min-size:aof文件重写最小的文件大小,即最开始aof文件必须要达到这个文件时才触发,后面的每次重写就不会根据这个变量了(根据上一次重写完成之后的大小).此变量仅初始化启动redis有效.如果是redis恢复时,则lastSize等于初始aof文件大小.
7.aof-load-truncated:指redis在恢复时,会忽略最后一条可能存在问题的指令。默认值yes。即在aof写入时,可能存在指令写错的问题(突然断电,写了一半),这种情况下,yes会log并继续,而no会直接恢复失败.
8.aof-use-rdb-preamble:Redis4.0新增RDB-AOF混合持久化格式,在开启了这个功能之后,AOF重写产生的文件将同时包含RDB格式的内容和AOF格式的内容,其中RDB格式的内容用于记录已有的数据,而AOF格式的内存则用于记录最近发生了变化的数据,这样Redis就可以同时兼有RDB持久化和AOF持久化的优点(既能够快速地生成重写文件,也能够在出现问题时,快速地载入数据)。
十三.LUA SCRIPTING(Lua 脚本) 【了解】
1.lua-time-limit:一个Lua脚本最长的执行时间,单位为毫秒,如果为0或负数表示无限执行时间,默认为5000
十四.REDIS CLUSTER(集群)【熟悉】
1.cluster-enabled:如果是yes,表示启用集群,否则以单例模式启动
2.cluster-config-file:可选,这不是一个用户可编辑的配置文件,这个文件是Redis集群节点自动持久化每次配置的改变,为了在启动的时候重新读取它。
3.cluster-node-timeout:超时时间,集群节点不可用的最大时间。如果一个master节点不可到达超过了指定时间,则认为它失败了。注意,每一个在指定时间内不能到达大多数master节点的节点将停止接受查询请求。
4.cluster-slave-validity-factor:如果设置为0,则一个slave将总是尝试故障转移一个master。如果设置为一个正数,那么最大失去连接的时间是node timeout乘以这个factor。
5.cluster-migration-barrier:一个master和slave保持连接的最小数量(即:最少与多少个slave保持连接),也就是说至少与其它多少slave保持连接的slave才有资格成为master。
6.cluster-require-full-coverage:如果设置为yes,这也是默认值,如果key space没有达到百分之多少时停止接受写请求。如果设置为no,将仍然接受查询请求,即使它只是请求部分key。
7.cluster-slave-no-failover:此选项设置为yes时,可防止从设备尝试对其进行故障转移master在主故障期间。 然而,仍然可以强制执行手动故障转移。
十五.CLUSTER DOCKER/NAT support(集群Docker/NAT支持)
1.cluster-announce-ip:要宣布的Ip地址
2.cluster-announce-port:要宣布的数据端口
3.cluster-announce-bus-port:要宣布的集群总线端口
十六.SLOW LOG(慢日志)【了解】
1.slowlog-log-slower-than:决定要对执行时间大于多少微秒(microsecond,1秒 = 1,000,000 微秒)的查询进行记录
2.slowlog-max-len:它决定 slow log 最多能保存多少条日志, slow log 本身是一个 FIFO 队列,当队列大小超过 slowlog-max-len 时,最旧的一条日志将被删除,而最新的一条日志加入到 slow log ,以此类推。
十七.LATENCY MONITOR(延迟监控)
1.latency-monitor-threshold:能够采样不同的执行路径来知道redis阻塞在哪里。这使得调试各种延时问题变得简单,设置一个毫秒单位的延时阈值来开启延时监控。
十八.EVENT NOTIFICATION(事件通知)
1.notify-keyspace-events:
十九.ADVANCED CONFIG(高级配置)
1.hash-max-ziplist-entries 512:表示当hash项(field,value)数>512即ziplist项>1024的时候转为dict
2.hash-max-ziplist-value 64:表示当hash中的value长度超过64的时候转为dict。
3.list-max-ziplist-size:
4.list-compress-depth:
5.set-max-intset-entries:当集合中的元素全是整数,且长度不超过set-max-intset-entries(默认为512个)时,redis会选用intset作为内部编码
6.zset-max-ziplist-entries:当有序集合的元素小于zset-max-ziplist-entries配置(默认是128个),同时每个元素的值都小于zset-max-ziplist-value(默认是64字节)时,Redis会用ziplist来作为有序集合的内部编码实现,ziplist可以有效的减少内存的使用
7.zset-max-ziplist-value:当有序集合的元素小于zset-max-ziplist-entries配置(默认是128个),同时每个元素的值都小于zset-max-ziplist-value(默认是64字节)时,Redis会用ziplist来作为有序集合的内部编码实现,ziplist可以有效的减少内存的使用
8.hll-sparse-max-bytes:value大小 小于等于hll-sparse-max-bytes使用稀疏数据结构(sparse),大于hll-sparse-max-bytes使用稠密的数据结构(dense)。
9.activerehashing:Redis将在每100毫秒时使用1毫秒的CPU时间来对redis的hash表进行重新hash,可以降低内存的使用。
10.client-output-buffer-limit:某些条件下,服务器就会立即断开客户端连接。
11.client-query-buffer-limit:
12.proto-max-bulk-len:
13.hz:redis执行任务的频率为1s除以hz。
14.aof-rewrite-incremental-fsync:在aof重写的时候,如果打开了aof-rewrite-incremental-fsync开关,系统会每32MB执行一次fsync。这对于把文件写入磁盘是有帮助的,可以避免过大的延迟峰值。
15.lfu-log-factor:factor越高,可以达到饱和(极限)容纳的key就越多。
16.lfu-decay-time:decay-time是计数器的衰变时间。
17.activedefrag:
18.active-defrag-ignore-bytes:
19.active-defrag-threshold-lower:
20.active-defrag-threshold-upper:
21.active-defrag-cycle-min:
22.active-defrag-cycle-max:
* 虚拟内存(Redis2.6后已移除)
1.vm-enabled:是否启用虚拟内存。
2.vm-swap-file:虚拟内存文件路径
3.vm-max-memory:将大于vm-max-memory的数据放入虚拟内存,注意,所有的索引数据(Key)不会放入虚拟内存。
4.vm-page-size:设置swap中page的大小
5.vm-page:设置swap文件中的page的数量。
6.vm-max-threads:设置访问swap文件的线程数,最好不要超过机器的核数。
7.glueoutputbuf:设置在向客户端应答时,是否把较小的包合并为一个包发送,默认为开启。