Redis配置文件小结

时间:2022-06-01 20:37:05

常规配置

daemonize <yes> | <no>

是否将redis server作为守护进程启动,是<yes>;否<no>

pidfile <pid文件完整路径>

redis server以守护进程启动时,该文件用于存储redis server的进程号,默认值为:/var/run/redis.pid

port <port>

指定redis的监听端口,默认为:6379;

bind <ip address>

指定redis接受的客户端白名单,设定后,仅白名单中的机器可以访问该台redis服务器,其他则拒绝;

timeout <seconds>

当连接redis服务器的客户端沉默(即:与服务器没有任何通信)超过设定的时间,redis服务器则断开与该客户端的连接。当设定为0时,表示永不断开;

tcp-keepalive <seconds>

服务器发送TCP ACK报文到客户端的时间间隔,用于检测客户端是否仍然活动,以及客户端设备的可用性;

loglevel <level>

定义redis日志的级别,主要包含以下几种:

  1. debug:对redis server所有的操作进行日志记录,主要用于开发、测试阶段;
  2. verbose:日志级别高于debug,低于notice,会提供部分的操作日志,但是比debug少;
  3. notice:生产环境配置,类似于log4j的info级别;
  4. warning:只有重要信息才会添加进log中,类似于log4j的warning级别;
logfile <filepath>

指定log文件的保存地址;

databases <number>

设定redis数据库的个数,redis默认选中的redis服务器为database0,可以通过select <dbid>来选择redis使用的数据库,dbid的值由0到database-1;

Snapshooting(快照配置)

save <seconds> <changes>

redis服务器在{seconds}秒中产生{changes}次写操作,则触发bgsave命令进行快照创建;

stop-writes-on-bgsave-error <yes> | <no>

当redis服务器启动snapshoot服务,并且bgsave命令创建快照失败时触发本配置;设定为yes时,redis服务器不再接收任何写操作,在快照创建成功后,redis服务器恢复正常;设定为no时,redis服务器将忽略bgsave产生的错误,正常接收、执行客户端发来的写命令;

rdbcompression <yes> | <no>

创建快照时,是否对字符串采用LZF算法进行压缩;yes:对字符串进行压缩,从而降低.rdb文件的大小,但是会有一定的CPU开销;no:不对字符串执行压缩,节省CPU,但会导致.rdb文件大小的增加;

rdbchecksum <yes> | <no>

由快照文件恢复数据到redis时,是否启动对.rdb文件的CRC64校验和验证;默认情况下,redis在创建.rdb文件时,会将内容的CRC64校验和追加在.rdb文件的末尾;在由.rdb文件恢复数据时,会对校验和进行检测,如果设定为no,则跳过本项目检测;开启本选项,会消耗服务器大概10%左右性能,因此追求性能最大化时,关闭本选项;

dbfilename <filename>

设置快照文件的文件名称,以.rdb结尾;

dir <filedir>

设定快照文件的保存目录;

Replication(用于配置master-slave结构)

slaveof  <master-server-ip>  <port>

配置当前redis服务器为另一台线上redis服务器的从服务器;master-server-ip为线上redis服务器的地址,port为线上redis服务器的监听端口;

masterauth <requirepass>

主服务器的访问密码

slave-serve-stale-data <yes> | <no>

设定slave丢失master连接或者复制操作正在进行中时,slave服务器是否响应客户端查询请求;yes:slave仍响应请求,但可能返回失效消息;no:除INFOSLAVEOF命令外,其他请求均返回"SYNC with master in progress"

slave-read-only <yes> | <no>

设定salve服务器是否为只读,默认为yes

repl-ping-slave-period <seconds>

slave服务器向master服务器发送ping请求的时间间隔;

repl-disable-tcp-nodelay <yes> | <no>

在完成同步后,是否开启TCP_NODELAY;开启后,redis会将需要同步的数据打包成TCP数据包,占用更少的带宽发送,但是数据的延迟会升高到40ms左右;关闭后,主从的数据延迟会降低,但是带宽的占用会有一定程度的升高;

repl-backlog-size <size>

当slave断开后,master服务器缓存需要同步的数据到backlog文件,本选项用于设定backlog文件的大小;在设定本选项后,当slave断开,master服务器会缓存需要写入到slave服务器的数据,设定的值越大,则容错性越高,但当slave服务器重连时,需要的恢复时间也就越长;

repl-backlog-ttl  <seconds>

master在没有slave连接超过<seconds>时,将backlog文件释放;

slave-priority <0-100>

需配合Redis Sentinel使用,在slave服务器上设定其优先值;当master服务器出现问题时,低优先值的slave服务器将被选为master服务器,但当primority为0时,则永远不会被选为master服务器。

min-slaves-to-write <number>

当master服务器的salve服务器的数量小于{number}时,master会停止所有的写操作,默认为0;

min-slaves-max-lag <seconds>

master服务器接收到slave服务器的ping请求的时间间隔必须 <={seconds},否则会认为salve服务器非活跃;

Security(安全)

requirepass  <pwd>

设定redis服务器的访问密码;

rename-command <command name> <new name>

对redis命令进行重命名,并同步到所有的slave服务器,可能导致问题,谨慎使用;

Limits(限制)

maxclients <number>

设定redis服务器同时允许的连接数,默认值为10,000

maxmemory <bytes>

设定允许redis占用的最大内存数;当redis达到内存设定值时,会根据设定的key值驱逐策略删除key;当redis设定驱逐策略为noeviction时,会block所有可能增加内存使用的操作,如:set,lpush等;master服务器上为slave主机准备的容错buffer(backlog)的容量也会计入到master服务器占用的内存中;

maxmemory-policy <policy>

配置当redis占用的内存超出限制时,使用的key驱逐策略;
- volatile-lru -> remove the key with an expire set using an LRU algorithm;
- allkeys-lru -> remove any key according to the LRU algorithm;
- volatile-random -> remove a random key with an expire set;
- allkeys-random -> remove a random key, any key;
- volatile-ttl -> remove the key with the nearest expire time (minor TTL);
- noeviction -> don’t expire at all, just return an error on write operations(默认值);
当没有合适的key可以用于移除时,redis将对所有的写信息返回错误;

maxmemory-samples <number>

设定LRU和TTL算法的取样值;redis会挑选<number>个key,选出最近最长时间未被访问,或者距离过期时间最短的key进行驱逐;

Append Only Mode (追加文件持久化)

appendonly <yes> | <no>

是否开启aof持久化模式;

appendfilename "<filename>"

设定redis服务器aof文件的存放地址,以.aof结尾;

appendfsync <choice>

设定redis服务器追加文件的规则,主要有3种:
- 由操作系统决定何时将操作日志追加到aof文件末尾,是最快的aof方式;
- redis每执行一次写入命令,均将操作日志追加到aof文件末尾,是最安全的方式,但对性能影响巨大;
- 每秒钟将写入命令追加到aof文件末尾,是一种折中的方式,性能影响可以忽略不计;

no-appendfsync-on-rewrite <yes> | <no>

bgsaveBGREWRITEAOF进行中时,是否允许调用fsync()函数;yes:允许调用,但是由于硬盘在进行密集交互,导致进程block;no:不允许调用,如果没有数据延迟问题,建议使用本选项;

auto-aof-rewrite-percentage <1-100>
auto-aof-rewrite-min-size <mb>

配置AOF的重写操作,主要是命令的压缩;当aof文件的大小大与上次重写后的文件的<percantage>并且文件大于配置的<min-size>时,则对aof文件进行重写;

aof-load-truncated <yes> | <no>

当aof文件出现损坏时,是否启动redis服务器;yes:文件出现损坏,redis服务器加载尽可能多的数据,并在log文件中插入一条记录;no:redis服务器不能正常启动,需要用户在启动redis服务器之前,使用`redis-check-aof工具进行修复`;

Lua scripting (lua脚本设定)

lua-time-limit <milliseconds>

设定单个lua脚本最大允许的执行时间;当执行达到设置时间时,redis服务器将对所有的查询命令返回错误;可以使用两个命令终止脚本:
- script kill:可以终止没有调用写命令的脚本
- shutdown nosave:在脚本已经开始执行写命令,但用户不想等待写完成时,关闭redis服务器;

Slow log (慢日志)

slowlog-log-slower-than <microseconds>

超过<microseconds>,则会认为是慢查询;

slowlog-max-len <length>

指定慢查询日志的长度,该长度会直接占用redis的内存;

Latency monitor (延迟监视器设定)

redis服务器会对发送到redis的各个操作进行抽样,从而计算服务器的响应延迟,其主要用于生成服务器运行报告以及图表;

latency-monitor-threshold <millisecond>

设定monitor的监视阈值,当响应时间大于设定时间时,将计入日志系统;

Advanced configs (redis高级特性)

hash-max-ziplist-entries <number>
hash-max-ziplist-value <bytes>

在redis中,存储较小的hash类型时,默认使用的为ziplist方式,以求降低使用空间;当redis中的某一hash类型超过设定的阈值时,则将ziplist重构为hash-table;第一个选项,设定了hash类型中保存的entry数目阈值;第二个选项,设定了在单个entry中,key和value的阈值字节数目;

list-max-ziplist-entries <number>
list-max-ziplist-value <bytes>

redis中默认使用占用空间更小的ziplist存储List数据类型;当列表中元素数量超过<number>活着其中任一元素长度大于<bytes>字节时,则自动扩展为LinkedList结构;

set-max-intset-entries <number>

当set中存储的只有数字时,会采取intset进行存储,降低内存占用;当set中的元素小于<number>时候,对set进行紧凑型存储;

zset-max-ziplist-entries
zset-max-ziplist-value

与Hash类似;

activerehashing <yes> | <no>

是否开启hash重绘;redis会以每秒10次的频率对redis顶层的hash-table进行重绘,并释放可能的内存,但是这对于操作可能会有2ms左右的延迟;如果不确定,并且对数据的实时性的要求较高,建议关闭本选项;

client-output-buffer-limit <class> <hard limit mb> <soft limit mb> <soft seconds>

设定客户端缓存机制,判定是否断开客户端;
- <class>:设置缓存对应的客户端类型:

  • normal:普通的redis客户端,包括monitor;
  • slave:redis的slave服务器;
  • pubsub:订阅了pubsub通道的客户端;

-hard limit:当某个客户端的buffer高于本参数设定值时,直接断开客户端连接;

-soft limit soft seconds:客户端的buffer高于soft limit设定的阈值,并持续超过本阈值秒,断开客户端连接;

hz <1-500> 

redis执行内部函数(如close client, purge timeout keys等)的频率;设定值越高,大量key过期时的响应速度也就越快,建议设定为10,当对延迟的要求较苛刻时,可以设定为100,但是不建议超过100;