常规配置
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日志的级别,主要包含以下几种:
- debug:对redis server所有的操作进行日志记录,主要用于开发、测试阶段;
- verbose:日志级别高于debug,低于notice,会提供部分的操作日志,但是比debug少;
- notice:生产环境配置,类似于log4j的info级别;
- 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:除INFO
和SLAVEOF
命令外,其他请求均返回"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>
在bgsave
或BGREWRITEAOF
进行中时,是否允许调用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;