Redis 配置文件详解
Redis 配置文件详解
单位注意:当需要指定内存大小的时候,需要指定1k、5GB、4m等类似单位:
# 1k => 1000 bytes
# 1kb => 1024 bytes
# 1m => 1000000 bytes
# 1mb => 10241024 bytes
# 1g => 1000000000 bytes
# 1gb => 10241024*1024 bytes
bind 127.0.0.1
绑定的主机地址protected-mode yes
当安全模式启用时
1)服务器没有配置bind
2)没有配置密码
则服务器默认只接受本地的连接和 Unix domain socketsport 6379
指定redis监听端口tcp-backlog 511
TCP完成连接队列,该值与系统中/proc/sys/net/core/somaxconn
的值取最小值timeout 0
客户端与服务器的连接超时时间,0为不超时tcp-keepalive 300
周期性使用SO_KEEPSLIVE
检测客户端是否处于健康状态,避免服务器阻塞,官方建议300秒(从3.2.1版本开始)daemonize yes
以守护进程的方式启动supervised no
不使用系统工具管理,可选项为auto、upstart、systemd、no
pidfile /var/run/redis_6379.pid
如果没设置后台守护进程,且没指定pidfile,则没有pid文件被创建
如果设置了后台守护进程,则会创建/var/run/redis.pid
如果设置了后台守护进程,且指定pidfile,则以pidfile为准
没有创建成功pidfile不影响Redis正常启动和运行loglevel notice
定义日志级别
debug
:适用于开发和测试
verbose
:比debug少点
notice
:适用于生产环境
warning
:重要信息和错误信息
logfile ""
指定日志文件位置databases 16
数据库数量,默认16个,使用SELECT dbid 命令连接指定数据库IDsave seconds changes
指定时间内若有指定次数更新操作,就将数据同步到数据文件
默认配置三条策略:
- save 900 1
- save 300 10
- save 60 10000
stop-writes-on-bgsave-error yes
redis最后一次后台保存失败,redis 将停止接受写操作,以告诉用户数据不能正确的持久化到硬盘。rdbcompression yes
是否在dump.rdp
数据库文件的时候使用LZF压缩字符串rdbchecksum yes
是否校验rdp文件dbfilename dump.rdb
设置dump.rdp文件名称dir ./
设置dump.rdp文件位置slaveof masterip masterport
本机若为salve时,设置master的IP地址和端口,当redis启动时会自动从master进行数据同步masterauth master-password
当master设置密码保护时,slave连接master的密码。slave-serve-stale-data yes
当slave与master失去联系,或者复制正在进行的时候,slave可能会有两种表现:
- 如果为
yes
,slave仍然会应答客户端请求,但返回的数据可能是过时的,或者在第一次同步的时候,数据可能是空的。 - 如果为
no
,除了执行info
和slaveof
之外的其他命令都将返回一个SYNC with master in progress
的错误。
slave-read-only yes
设置slave为只读。repl-diskless-sync no
无盘备份,默认禁用。
- 在硬盘备份的情况下,主站的子进程生成RDB文件。一旦生成,多个从站可以立即排成队列使用主站的RDB文件。
- 在无硬盘备份的情况下,一次RDB传送开始,新的从站到达后,需要等待现在的传送结束,才能开启新的传送。
repl-diskless-sync-delay 5
无盘备份的等待时间,设置为0时,传送会立即开始,则其他slave则需要等待传送完成后才可以传送。repl-ping-slave-period 10
slave以一个预先设置好的时间间隔向服务器发送PING。这个时间间隔可以通过repl_ping_slave_period选项改变。默认值是10秒。repl-timeout 60
数据同步的超时时间。
- 从slave角度,同步期间批量传输的I/O
- 从slave角度认为master超时(数据、ping)
- 从master角度认为slave超时(REPLCONF ACK pings)
确认该值比repl-ping-slave-period
要大,否则每次主站和从站之间通信低速时都会被检测为超时。
repl-disable-tcp-nodelay no
同步之后是否禁用slave上的TCP_NODELAY
- 如果选择
yes
,master会使用少量的TCP包和带宽向slave发送数据,但会导致slave会有数据延迟。Linux内核默认配置情况下最多40ms的延时。 - 如果选择
no
,slave将不会有延时,但同步数据时会消耗较大的带宽。
默认情况为低延迟优化,但在带宽拥堵或者主从距离较远的情况下,将其更改为yes
会更好。
-
repl-backlog-size 1mb
设置主从复制缓冲区大小,这个backlog是存放slaves被断开连接时,存放slave数据的buffer,当slave重新连接时,通常不希望全部重新同步,只是同步部分,仅仅传递slave断开链接时丢失的数据。默认未配置。 -
repl-backlog-ttl 3600
master与slave断开连接一段时间后,对应的backlog
将被自动释放。该选项配置backlog
释放前等待的秒数,从断开链接开始计算,值为0
时表示不释放。 -
slave-priority 100
slave的优先级,该值越低优先级越高,当master宕机,sentinel会将优先级较高的提升为master角色。 -
min-slaves-to-write 3
min-slaves-max-lag 10
当连接master的slave少于3个,延时少于10秒时,master停止接受写请求。
3个slave必须在线。延时的秒数必须小于等于max-lag
,延迟秒数是从最后一次收到来自slave的ping开始计算,ping通常是每秒一次。
该选项并不保证3个备份都会接受写请求,但是会限制在指定秒数内由于slave数量不够导致写操作丢失的情况。
即:如果slave服务器少于3个,或者3个slave服务器的延迟都大于10秒时,主服务器拒绝写命令。
设置某一个为0表示禁用这一功能。
默认情况下min-slaves-to-write
设置为0(禁用)而min-slaves-max-lag
设置为10。 -
slave-announce-ip 5.5.5.5
slave-announce-port 1234
-
requirepass foobared
设置Redis连接密码。设置密码后,客户端连接Redis需要通过AUTH password
命令提供密码,默认关闭。 -
rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52
命令重命名。在共享环境下,可以将危险命令改变名字。
也可以通过改名为空字符串来完全禁用一个命令。
rename-command CONFIG ""
注意:改变命令名字被记录到AOF文件或被传送到slave服务器可能产生问题。 -
maxclients 10000
设置最多同时连接的客户端数量。默认限制为10000客户端。
Redis不能通过配置处理文件的限制数来满足指定的值,那么最大的客户端连接数就被设置成当前文件限制数减32(因为Redis服务器保留了一些文件描述符作为内部使用),一旦达到限制,Redis会关闭所有新连接并发送错误'max number of clients reached' -
maxmemory <bytes>
设置使用内存上限。
master为同步slave的输出缓冲区所需内存不计算在使用内存中。当附加多个slave时,建议设置稍小maxmemory
限制。
如果因为删除策略Redis无法删除key,或者策略设置为"noeviction",Redis会回复需要更多内存的错误信息给命令。 -
maxmemory-policy noeviction
最大内存策略:如果达到内存限制,Redis如何选择删除key。可以在以下五个选项里选择:
- volatile-lru -> 根据LRU算法生成的过期时间来删除。
- allkeys-lru -> 根据LRU算法删除任何key。
- volatile-random -> 根据过期设置来随机删除key。
- allkeys->random -> 无差别随机删。
- volatile-ttl -> 根据最近过期时间来删除(辅以TTL)
- noeviction -> 谁也不删,直接在写操作时返回错误。
注意:对所有策略来说,如果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
maxmemory-samples 5
LRU和最小TTL算法的实现都不是很精确,但是很接近(为了省内存),所以你可以用样本量做检测。
默认Redis会检查3个key然后取最旧的那个,你可以通过下面的配置指令来设置样本的个数。appendonly no
是否开启AOF持久化模式,默认关闭。appendfilename "appendonly.aof"
AOF持久化文件名称。appendfsync everysec
Redis中AOF持久化策略。支持三种模式:
- no:不要立刻刷,只有在操作系统需要刷的时候再刷。比较快。
- always:每次写操作都立刻写入到aof文件。慢,但是最安全。
- everysec:每秒写一次。折中方案。默认。
no-appendfsync-on-rewrite no
设置日志在重写的时候能否将命令追加到aof文件。
- yes:在日志重写时,不尽兴命令追加操作,而只是将其放在缓冲区,避免与命令的追加造成硬盘I/O上的冲突。若Redis在重写中down掉,丢失的数据是整个重写过程的所有数据。
- no:在日志重写时,命令追加操作照常进行。
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
Redis会记住上次重写时AOF文件的大小,以此为基准和当前大小做比较,如果当前大小超过指定比例,就会触发重写操作。指定重写日志大小的最小尺寸,避免到达指定百分比但尺寸仍然很小的情况还要重写。
指定百分比为0会禁用自动重写特性。aof-load-truncated yes
Redis启动加载aof文件,如果发现末尾命令不完整则自动截掉,成功加载前面正确的数据。
若设置为no
,遇到此类问题,Redis会启动失败,用redis-check-aof
工具手工修复。lua-time-limit 5000
Lua脚本的最大执行时间,单位为毫秒。
如果达到最大执行时间,Redis将要记录在达到最大允许时间之后一个脚本仍然在运行,并且开始对查询进行错误响应。
当脚本执行时间超过执行时间,可以使用SCRIPT KILL
杀掉没有调用write的脚步,如果要是已经调用write,就使用SHUTDOWN NOSAVE
杀掉。cluster-enabled yes
启用Redis集群cluster-config-file nodes-6379.conf
Redis集群配置文件,有Redis node维护,不能被创建和编辑,保证每个集群的配置文件不同。cluster-node-timeout 15000
Redis集群节点超时时间,单位毫秒。cluster-slave-validity-factor 10
设置是否进行故障转移超时参数。
当进行故障转移时,全部slave都会请求申请为master,但某些slave与master断开连接一段时间,导致数据过于陈旧,改参数用来设置该超时参数。
当slave断开时间(秒)大于(node-timeout*slave-validity-factor)+repl-ping-slave-period
的值,slave将不会尝试进行故障转移。
PS:node-timeout
默认为15s,slave-validity-factor
默认为10,repl-ping-slave-period
默认为10s,则默认slave断开连接的时间超过160s后将不进行故障转移。cluster-migration-barrier 1
master最小slave数,只有当slave达到这个数,slave才会进行迁移。cluster-require-full-coverage yes
在部分key所在的节点不可用时,如果此参数设置为'yes',则整个集群停止接受操作;如果此参数设置为'no',则集群依然为可达节点上的key提供读操作。slowlog-log-slower-than 10000
Redis慢查询超时时间,是指命令执行的实际时间,单位微秒,默认为1s。slowlog-max-len 128
慢查询日志的队列长度。长度没有限制,会消耗内存,可以通过SLOWLOG RESET
回收内存。latency-monitor-threshold 0
延时监控,Redis监控子系统在运行时,会抽样检测可能导致延时的不同操作。
可以通过LATENCY命令打印相关信息和报告:
LATENCY SAMPLES
:返回延时的事件抽样。LATENCY LATEST
:四列分别表示事件名、最近延迟的Unix时间戳、最近的延迟、最大延迟。LATENCY DOCTOR
:返回人类可读的分析延迟实例。LATENCY GRAPH
:以图形化的方式显示。最下面以竖行显示的是指延迟在多久以前发生。LATENCY RESET
:清除延时记录。
系统只记录超过设定值的操作,单位是毫秒,0表示禁用该功能。
可以通过命令"CONFIG SET latency-monitor-threshold <milliseconds>
"直接设置而不需要重启Redis。
notify-keyspace-events ""
禁用key space事件。
若key space事件被开启,并且客户端对0号数据库的key "foo" 执行DEL命令时,将通过Pub/Sub发布两条消息:
- PUBLISH keyspace@0:foo del
- PUBLISH keyevent@0:del foo
Redis事件通知类型。事件类型由单个字符来标识: - K 键空间通知,以__keyspace@
__为前缀 - E 键事件通知,以__keysevent@
__为前缀 - g DEL , EXPIRE , RENAME 等类型无关的通用命令的通知
- $ String命令
- l List命令
- s Set命令
- h Hash命令
- z 有序集合命令
- x 过期事件(每次key过期时生成)
- e 驱逐事件(当key在内存满了被清除时生成)
- A g$lshzxe的别名,因此”AKE”意味着所有的事件
K与E至少指定一个,否则不会发送任何事件。
例1 启用List和通知事件通知:notify-keyspace-events Elg
例2 为了获取过期key的通知订阅名字为 keyevent@:expired :notify-keyspace-events Ex
-
hash-max-ziplist-entries 512
当hash表中元素(条目)总个数没有超过设定数量时,采用高效内存数据结构来节省空间。 -
hash-max-ziplist-value 64
当hash表中每个value的长度不超过指定字节时,采用高效内存数据结构来节省空间。 -
list-max-ziplist-size -2
-
list-compress-depth 0
-
set-max-intset-entries 512
set的元素如果全部是整数(10进制),且为64位有符号整数,则采用特殊编码方式,该项设置当set使用这种编码方式的最大长度。 -
zset-max-ziplist-entries 128
当zset条目总个数没有超过设定数量时,采用高效内存数据结构来节省空间。 -
zset-max-ziplist-value 64
当zset的value的长度不超过指定字节时,采用高效内存数据结构来节省空间。 -
hll-sparse-max-bytes 3000
HyperLogLog稀疏表示字节限制,这个限制包含了16个字节的头部,当一个HyperLogLog使用稀疏表示超过了这个限制,就会转到稠密表示上,建议值为3000. -
activerehashing yes
每100毫秒,Redis会用1毫秒的时间对Hash表进行重新Hash。
Redis采用懒惰Hash方式:操作Hash越多,则重新Hash的可能越多,若根本就不操作Hash,则不会重新Hash。
默认每秒10次重新Hash主词典,释放可能释放的内存。
重新Hash会造成延时,大概为2毫秒,若对延迟要求较高,则设置为no,禁止重新Hash。但可能会浪费很多内存。 -
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
客户端的输出缓冲区限制,当客户端从服务端的读取速度不够快时,则强制断开。
三种客户端类型:normal、salve、pubsub,语法如下:
client-output-buffer-limit <class> <hard limit> <soft limit> <soft seconds>
一旦达到硬限制客户端会立即被断开,或者达到软限制并持续达到指定的秒数(连续的)。
把硬限制和软限制都设置为0来禁用该功能。 -
hz 10
Redis调用内部函数执行的后台任务频率。后台任务比如:清楚过期数据、客户端超时链接等。
默认为10,取值范围1~500,对延迟要求很低的可以设置超过100以上。 -
aof-rewrite-incremental-fsync yes
当重写AOF文件是,如果启用该选项,则文件每生成32M数据会被同步。为了增量写入硬盘并且避免延迟高峰。
作者:Orgliny
出处:https://www.cnblogs.com/Orgliny
本文采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。