Redis配置参数详解

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Redis配置参数详解
Redis是⼀个应⽤⾮常⼴泛的⾼性能Key-Value型数据库,与memcached类似,但功能更加强⼤!
本⽂将按照不同功能模块的⽅式,依次对各个功能模块的配置参数进⾏详细介绍。

GENERAL
./redis-server /path/to/redis.conf 按照指定的配置⽂件启动
include /path/to/other.conf 包含其它的redis配置⽂件
daemonize yes 启⽤后台守护进程运⾏模式
pidfile /var/run/redis.pid redis启动后的进程ID保存⽂件
port 6379 指定使⽤的端⼝号
bind IP 监听指定的⽹络接⼝
unixsocket /tmp/redis.sock 指定监听的socket,适⽤于unix环境
timeout N 客户端空闲N秒后断开连接,参数0表⽰不启⽤
loglevel notice 指定服务器信息显⽰的等级,4个参数分别为debug\verbose\notice\warning
logfile “” 指定⽇志⽂件,默认是使⽤系统的标准输出
syslog-enabled no 是否启⽤将记录记载到系统⽇志功能,默认为不启⽤
syslog-ident redis 若启⽤⽇志记录,则需要设置⽇志记录的⾝份
syslog-facility local0 若启⽤⽇志记录,则需要设置⽇志facility,可取值范围为local0~local7,表⽰不同的⽇志级别
databases 16 设置数据库的数量,默认启动时使⽤DB0,使⽤“select <dbid>”可以更换数据库
tcp-backlog 511 此参数确定TCP连接中已完成队列(3次握⼿之后)的长度,应⼩于Linux系统的/proc/sys/net/core/somaxconn的值,此选项默认值为511,⽽Linux的somaxconn默认值为128,当并发量⽐较⼤且客户端反应缓慢的时候,可以同时提⾼这两个参数。

tcp-keepalive 0 指定ACKs的时间周期,单位为秒,值⾮0的情况表⽰将周期性的检测客户端是否可⽤,默认值为60秒。

SNAPSHOTTING
数据保存频率:
save 900 1 900秒后保存,⾄少有1个key被更改时才会触发
save 300 10 300秒后保存,⾄少有10个key被更改时才会触发
save 60 10000 60秒后保存,⾄少有10000个key被更改时才会触发
stop-writes-on-bgsave-error yes 最近⼀次save操作失败则停⽌写操作
rdbcompression yes 启⽤压缩
rdbchecksum yes 启⽤CRC64校验码,当然这个会影响⼀部份性能
dbfilename dump.rdb 指定存储数据的⽂件名
dir ./ 指定⼯作⽬录,rdb⽂件和aof⽂件都会存放在这个⽬录中,默认为当前⽬录
SECURITY
requirepass foobared 有slave端连接时是否需要密码验证
LIMITS
maxclients 10000 同⼀时间内最⼤clients连接的数量,超过数量的连接会返回⼀个错误信息
maxmemory <bytes>设置最⼤内存
如果内存使⽤量到达了最⼤内存设置,有6种处理⽅法:
1volatile-lru -> remove the key with an expire set using an LRU algorithm
2 allkeys-lru -> remove any key according to the LRU algorithm
3volatile-random -> remove a random key with an expire set
4 allkeys-random -> remove a random key, any key
5volatile-ttl -> remove the key with the nearest expire time (minor TTL)
6 noeviction -> don't expire at all, just return an error on write operations
默认的设置是 maxmemory-policy noeviction
maxmemory-samples 5 LRU算法检查的keys个数
APPEND ONLY MODE
appendonly yes 启⽤AOF模式
appendfilename “appendonly.aof” 设置AOF记录的⽂件名
向磁盘进⾏数据刷写的频率,有3个选项:
always 有新数据则马上刷写,速度慢但可靠性⾼
everysec 每秒钟刷写⼀次,折衷⽅法,所谓的redis可以只丢失1秒钟的数据就是源于此处
no 按照OS⾃⾝的刷写策略来进⾏,速度最快
使⽤选项来进⾏设置 appendfsync everysec
no-appendfsync-on-rewrite no 当主进程在进⾏向磁盘的写操作时,将会阻⽌其它的fsync调⽤
auto-aof-rewrite-percentage 100 aof⽂件触发⾃动rewrite的百分⽐,值为0则表⽰禁⽤⾃动rewrite
auto-aof-rewrite-min-size 64mb aof⽂件触发⾃动rewrite的最⼩⽂件size
aof-load-truncated yes 是否加载不完整的aof⽂件来进⾏启动
LUA SCRIPTING
lua-time-limit 5000 设置lua脚本的最⼤运⾏时间,单位为毫秒
EVENT NOTIFICATION
notify-keyspace-events “” 事件通知,默认不启⽤,具体参数查看配置⽂件
REPLICATION
Redis的主从复制采⽤异步的⽅式进⾏。

如果同步连接时slave端短暂的与master端断开了连接,那连接恢复后允许slave端与master端进⾏⼀次局部的再同步。

主从复制是⾃动进⾏的,并不需要⽤户的介⼊,slave端会⾃动尝试重连master并进⾏数据同步。

slaveof <master ip> <master port>设置master端的IP与端⼝信息
masterauth <master-password>如果master端启⽤了密码保护(requirepass),那slave端就需要配置此选项
slave-serve-stale-data yes 当slave端在主从复制的过程中与master端断开了连接,此时有2种处理⽅法:⼀种是继续提供服务即使数据可能不是最新的,另⼀种是对请求返回⼀个错误信息,默认配置是继续提供服务
slave-read-only yes ⾃redis 2.6版本开始,slave端默认为readonly
主从同步⽀持两种策略,即disk和socket⽅式(socket⽅式尚不完善,还处于实验阶段)。

新的slave端和重连的salve端不允许去继续同步进程,这被称之为“完全同步”。

⼀个RDB⽂件从master端传到slave端,分为两种情况:
1、⽀持disk:master端将RDB file写到disk,稍后再传送到slave端;
2、⽆磁盘diskless:master端直接将RDB file传到slave socket,不需要与disk进⾏交互。

⽆磁盘diskless⽅式适合磁盘读写速度慢但⽹络带宽⾮常⾼的环境。

repl-diskless-sync no 默认不使⽤diskless同步⽅式
repl-diskless-sync-delay 5 ⽆磁盘diskless⽅式在进⾏数据传递之前会有⼀个时间的延迟,以便slave端能够进⾏到待传送的⽬标队列中,这个时间默认是5秒
repl-ping-slave-period 10 slave端向server端发送pings的时间区间设置,默认为10秒
repl-timeout 60 设置超时时间
repl-disable-tcp-nodelay no 是否启⽤TCP_NODELAY,如果启⽤则会使⽤少量的TCP包和带宽去进⾏数据传输到slave端,当然速度会⽐较慢;如果不启⽤则传输速度⽐较快,但是会占⽤⽐较多的带宽。

repl-backlog-size 1mb 设置backlog的⼤⼩,backlog是⼀个缓冲区,在slave端失连时存放要同步到slave的数据,因此当⼀个slave要重连时,经常是不需要完全同步的,执⾏局部同步就⾜够了。

backlog设置的越⼤,slave可以失连的时间就越长。

repl-backlog-ttl 3600 如果⼀段时间后没有slave连接到master,则backlog size的内存将会被释放。

如果值为0则表⽰永远不释放这部份内存。

slave-priority 100 slave端的优先级设置,值是⼀个整数,数字越⼩表⽰优先级越⾼。

当master故障时将会按照优先级来选择slave端进⾏恢复,如果值设置为0,则表⽰该slave永远不会被选择。

min-slaves-to-write 3
min-slaves-max-lag 10 设置当⼀个master端的可⽤slave少于N个,延迟时间⼤于M秒时,不接收写操作。

REDIS CLUSTER
⼀个正常的redis实例是不能做为⼀个redis集群的节点的,除⾮它是以⼀个集群节点的⽅式进⾏启动。

cluster-enabled yes 配置redis做为⼀个集群节点来启动
cluster-config-file node-6379.conf 每个集群节点都有⼀个集群配置⽂件,这个⽂件不需要编辑,它由redis节点来创建和更新。

每个redis节点的集群配置⽂件不可以相同。

cluster-node-timeout 15000 设置集群节点超时时间,如果超过了指定的超时时间后仍不可达,则节点被认为是失败状态,单位为毫秒。

⼀个属于失效的master端的slave,如果它的数据较旧,将不会启动failover。

现在来讲并没有⼀个简单的⽅法去解决如何判定⼀个slave端的数据的时效性问题,所以可以执⾏以下两个选择:
1、如果有多个slave可⽤于failover,它们会交换信息以便选出⼀个最优的进⾏主从复制的offset,slave端会尝试依据offset去获取每个slave 的rank,这样在启动failover时对每个slave的利⽤就与slave端的rank成正⽐。

2、每个slave端和它的master端进⾏最后交互的时间,这可能是最近的ping或指令接收时间,或⾃与master端失连的过时时间。

如果最近的
交互时间太久,slave就不会尝试去进⾏failover。

第2点可以由⽤户来进⾏调整,明确⼀个slave不会进⾏failover。

⾃最近⼀次与master端进⾏交互,过时时间有⼀个计算公式:
(node-timeout * slave-validity-factor)+repl-ping-slave-period
⼀个⽐较⼤的slave-validity-factor参数能够允许slave端使⽤⽐较旧的数据去failover它的master端,⽽⼀个⽐较⼩的值可能会阻⽌集群去选择slave端。

为获得最⼤的可⽤性,可以设置slave-validity-factor的值为0,这表⽰slave端将会⼀直去尝试failover它的master端⽽不管它与master端的最后交互时间。

cluster-slave-validity-factor 10 默认值为10
集群中的slave可以迁移到那些没有可⽤slave的master端,这提升了集群处理故障的能⼒。

毕竟⼀个没有slave的master端如果发⽣了故障是没有办法去进⾏failover的。

要将⼀个slave迁移到别的master,必须这个slave的原master端有⾄少给定数⽬的可⽤slave才可以进⾏迁移,这个给定的数⽬由migration barrier参数来进⾏设置,默认值为1,表⽰这个要进⾏迁移的slave的原master端应该⾄少还有1个可⽤的slave才允许其进⾏迁移,要禁⽤这个功能只需要将此参数设置为⼀个⾮常⼤的值。

cluster-migration-barrier 1
默认情况下当redis集群节点发现有⾄少⼀个hashslot未被covered时将会停⽌接收查询。

这种情况下如果有⼀部份的集群down掉了,那整个集群将变得不可⽤。

集群将会在所有的slot重新covered之后⾃动恢复可⽤。

若想要设置集群在部份key space没有cover完成时继续去接收查询,就将参数设置为no。

cluster-require-full-coverage yes
SLOW LOG
redis的slow log是⼀个系统OS进⾏的记录查询,它是超过了指定的执⾏时间的。

执⾏时间不包括类似与client进⾏交互或发送回复等I/O操作,它只是实际执⾏指令的时间。

有2个参数可以配置,⼀个⽤来告诉redis执⾏时间,这个时间是微秒级的(1秒=1000000微秒),这是为了不遗漏命令。

另⼀个参数是设置slowlog的长度,当⼀个新的命令被记录时,最旧的命令将会从命令记录队列中移除。

slowlog-log-slower-than 10000
slowlog-max-len 128
可以使⽤“slowlog reset”命令来释放slowlog占⽤的内存。

LATENCY MONITOR
latency-monitor-threshold 0 延迟监控,⽤于记录等于或超过了指定时间的操作,默认是关闭状态,即值为0。

ADVANCED CONFIG
当条⽬数量较少且最⼤不会超过给定阀值时,哈希编码将使⽤⼀个很⾼效的内存数据结构,阀值由以下参数来进⾏配置。

hash-max-ziplist-entries 512
hash-max-ziplist-value 64
与哈希类似,少量的lists也会通过⼀个指定的⽅式去编码从⽽节省更多的空间,它的阀值通过以下参数来进⾏配置。

list-max-ziplist-entries 512
list-max-ziplist-value 64
集合sets在⼀种特殊的情况时有指定的编码⽅式,这种情况是集合由⼀组10进制的64位有符号整数范围内的数字组成的情况。

以下选项可以设置集合使⽤这种特殊编码⽅式的size限制。

set-max-intset-entries 512
与哈希和列表类似,有序集合也会使⽤⼀种特殊的编码⽅式来节省空间,这种特殊的编码⽅式只⽤于这个有序集合的长度和元素均低于以下参数设置的值时。

zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000 设置HyeperLogLog的字节数限制,这个值通常在0~15000之间,默认为3000,基本不超过16000 activerehashing yes redis将会在每秒中抽出10毫秒来对主字典进⾏重新散列化处理,这有助于尽可能的释放内存
因为某些原因,client不能⾜够快的从server读取数据,那client的输出缓存限制可能会使client失连,这个限制可⽤于3种不同的client种类,分别是:normal、slave和pubsub。

进⾏设置的格式如下:
client-output-buffer-limit <class><hard limit><soft limit><soft seconds>
如果达到hard limit那client将会⽴即失连。

如果达到soft limit那client将会在soft seconds秒之后失连。

参数soft limit < hard limit。

client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
redis使⽤⼀个内部程序来处理后台任务,例如关闭超时的client连接,清除过期的key等等。

它并不会同时处理所有的任务,redis通过指定的hz参数去检查和执⾏任务。

hz默认设为10,提⾼它的值将会占⽤更多的cpu,当然相应的redis将会更快的处理同时到期的许多key,以及更精确的去处理超时。

hz的取值范围是1~500,通常不建议超过100,只有在请求延时⾮常低的情况下可以将值提升到100。

hz 10
当⼀个⼦进程要改写AOF⽂件,如果以下选项启⽤,那⽂件将会在每产⽣32MB数据时进⾏同步,这样提交增量⽂件到磁盘时可以避免出现⽐较⼤的延迟。

aof-rewrite-incremental-fsync yes。

相关文档
最新文档