Redis 配置文件详解

Redis 配置文件详解

 单位注意:当须要指定内存大小的时候,须要指定1k、5GB、4m等相似单位:
 # 1k => 1000 bytes
 # 1kb => 1024 bytes
 # 1m => 1000000 bytes
 # 1mb => 10241024 bytes
 # 1g => 1000000000 bytes
 # 1gb => 1024
1024*1024 bytesnode

  1. bind 127.0.0.1
     绑定的主机地址
  2. protected-mode yes
     当安全模式启用时
      1)服务器没有配置bind
      2)没有配置密码
     则服务器默认只接受本地的链接和 Unix domain sockets
  3. port 6379
     指定redis监听端口
  4. tcp-backlog 511
     TCP完成链接队列,该值与系统中/proc/sys/net/core/somaxconn的值取最小值
  5. timeout 0
     客户端与服务器的链接超时时间,0为不超时
  6. tcp-keepalive 300
     周期性使用SO_KEEPSLIVE检测客户端是否处于健康状态,避免服务器阻塞,官方建议300秒(从3.2.1版本开始)
  7. daemonize yes
     以守护进程的方式启动
  8. supervised no
     不使用系统工具管理,可选项为auto、upstart、systemd、no
  9. pidfile /var/run/redis_6379.pid
     若是没设置后台守护进程,且没指定pidfile,则没有pid文件被建立
     若是设置了后台守护进程,则会建立/var/run/redis.pid
     若是设置了后台守护进程,且指定pidfile,则以pidfile为准
     没有建立成功pidfile不影响Redis正常启动和运行
  10. loglevel notice
     定义日志级别
     debug适用于开发和测试
     verbose比debug少点
     notice适用于生产环境
     warning:重要信息和错误信息
  11. logfile ""
     指定日志文件位置
  12. databases 16
     数据库数量,默认16个,使用SELECT dbid 命令链接指定数据库ID
  13. save seconds changes
     指定时间内如有指定次数更新操做,就将数据同步到数据文件
     默认配置三条策略:
  • save 900 1
  • save 300 10
  • save 60 10000
  1. stop-writes-on-bgsave-error yes
     redis最后一次后台保存失败,redis 将中止接受写操做,以告诉用户数据不能正确的持久化到硬盘。
  2. rdbcompression yes
     是否在dump.rdp数据库文件的时候使用LZF压缩字符串
  3. rdbchecksum yes
     是否校验rdp文件
  4. dbfilename dump.rdb
     设置dump.rdp文件名称
  5. dir ./
     设置dump.rdp文件位置
  6. slaveof masterip masterport
     本机若为salve时,设置master的IP地址和端口,当redis启动时会自动从master进行数据同步
  7. masterauth master-password
      当master设置密码保护时,slave链接master的密码。
  8. slave-serve-stale-data yes
     当slave与master失去联系,或者复制正在进行的时候,slave可能会有两种表现:
  • 若是为yes,slave仍然会应答客户端请求,但返回的数据多是过期的,或者在第一次同步的时候,数据多是空的。
  • 若是为no,除了执行infoslaveof以外的其余命令都将返回一个SYNC with master in progress的错误。
  1. slave-read-only yes
     设置slave为只读。
  2. repl-diskless-sync no
     无盘备份,默认禁用。
  • 在硬盘备份的状况下,主站的子进程生成RDB文件。一旦生成,多个从站能够当即排成队列使用主站的RDB文件。
  • 在无硬盘备份的状况下,一次RDB传送开始,新的从站到达后,须要等待如今的传送结束,才能开启新的传送。
  1. repl-diskless-sync-delay 5
     无盘备份的等待时间,设置为0时,传送会当即开始,则其余slave则须要等待传送完成后才能够传送。
  2. repl-ping-slave-period 10
     slave以一个预先设置好的时间间隔向服务器发送PING。这个时间间隔能够经过repl_ping_slave_period选项改变。默认值是10秒。
  3. repl-timeout 60
     数据同步的超时时间。
  • 从slave角度,同步期间批量传输的I/O
  • 从slave角度认为master超时(数据、ping)
  • 从master角度认为slave超时(REPLCONF ACK pings)
     确认该值比repl-ping-slave-period要大,不然每次主站和从站之间通讯低速时都会被检测为超时。
  1. repl-disable-tcp-nodelay no
     同步以后是否禁用slave上的TCP_NODELAY
  • 若是选择yes,master会使用少许的TCP包和带宽向slave发送数据,但会致使slave会有数据延迟。Linux内核默认配置状况下最多40ms的延时。
  • 若是选择no,slave将不会有延时,但同步数据时会消耗较大的带宽。
     默认状况为低延迟优化,但在带宽拥堵或者主从距离较远的状况下,将其更改成yes会更好。
  1. repl-backlog-size 1mb
     设置主从复制缓冲区大小,这个backlog是存放slaves被断开链接时,存放slave数据的buffer,当slave从新链接时,一般不但愿所有从新同步,只是同步部分,仅仅传递slave断开连接时丢失的数据。默认未配置。
  2. repl-backlog-ttl 3600
     master与slave断开链接一段时间后,对应的backlog将被自动释放。该选项配置backlog释放前等待的秒数,从断开连接开始计算,值为0时表示不释放。
  3. slave-priority 100
     slave的优先级,该值越低优先级越高,当master宕机,sentinel会将优先级较高的提高为master角色。
  4. 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。
  5. slave-announce-ip 5.5.5.5
    slave-announce-port 1234redis

  6. requirepass foobared
     设置Redis链接密码。设置密码后,客户端链接Redis须要经过AUTH password命令提供密码,默认关闭。
  7. rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52
     命令重命名。在共享环境下,能够将危险命令改变名字。
     也能够经过更名为空字符串来彻底禁用一个命令。
     rename-command CONFIG ""
     注意:改变命令名字被记录到AOF文件或被传送到slave服务器可能产生问题。
  8. maxclients 10000
     设置最多同时链接的客户端数量。默认限制为10000客户端。
     Redis不能经过配置处理文件的限制数来知足指定的值,那么最大的客户端链接数就被设置成当前文件限制数减32(由于Redis服务器保留了一些文件描述符做为内部使用),一旦达到限制,Redis会关闭全部新链接并发送错误'max number of clients reached'
  9. maxmemory <bytes>
     设置使用内存上限。
     master为同步slave的输出缓冲区所需内存不计算在使用内存中。当附加多个slave时,建议设置稍小maxmemory限制。
     若是由于删除策略Redis没法删除key,或者策略设置为"noeviction",Redis会回复须要更多内存的错误信息给命令。
  10. 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
  1. maxmemory-samples 5
     LRU和最小TTL算法的实现都不是很精确,可是很接近(为了省内存),因此你能够用样本量作检测。
     默认Redis会检查3个key而后取最旧的那个,你能够经过下面的配置指令来设置样本的个数。
  2. appendonly no
     是否开启AOF持久化模式,默认关闭。
  3. appendfilename "appendonly.aof"
     AOF持久化文件名称。
  4. appendfsync everysec
     Redis中AOF持久化策略。支持三种模式:
  • no:不要马上刷,只有在操做系统须要刷的时候再刷。比较快。
  • always:每次写操做都马上写入到aof文件。慢,可是最安全。
  • everysec:每秒写一次。折中方案。默认。
  1. no-appendfsync-on-rewrite no
     设置日志在重写的时候可否将命令追加到aof文件。
  • yes:在日志重写时,不尽兴命令追加操做,而只是将其放在缓冲区,避免与命令的追加形成硬盘I/O上的冲突。若Redis在重写中down掉,丢失的数据是整个重写过程的全部数据。
  • no:在日志重写时,命令追加操做照常进行。
  1. auto-aof-rewrite-percentage 100
    auto-aof-rewrite-min-size 64mb
     Redis会记住上次重写时AOF文件的大小,以此为基准和当前大小作比较,若是当前大小超过指定比例,就会触发重写操做。指定重写日志大小的最小尺寸,避免到达指定百分比但尺寸仍然很小的状况还要重写。
     指定百分比为0会禁用自动重写特性。
  2. aof-load-truncated yes
     Redis启动加载aof文件,若是发现末尾命令不完整则自动截掉,成功加载前面正确的数据。
     若设置为no,遇到此类问题,Redis会启动失败,用redis-check-aof工具手工修复。
  3. lua-time-limit 5000
     Lua脚本的最大执行时间,单位为毫秒。
     若是达到最大执行时间,Redis将要记录在达到最大容许时间以后一个脚本仍然在运行,而且开始对查询进行错误响应。
     当脚本执行时间超过执行时间,可使用SCRIPT KILL杀掉没有调用write的脚步,若是要是已经调用write,就使用SHUTDOWN NOSAVE杀掉。
  4. cluster-enabled yes
     启用Redis集群
  5. cluster-config-file nodes-6379.conf
     Redis集群配置文件,有Redis node维护,不能被建立和编辑,保证每一个集群的配置文件不一样。
  6. cluster-node-timeout 15000
     Redis集群节点超时时间,单位毫秒。
  7. 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后将不进行故障转移。
  8. cluster-migration-barrier 1
     master最小slave数,只有当slave达到这个数,slave才会进行迁移。
  9. cluster-require-full-coverage yes
     在部分key所在的节点不可用时,若是此参数设置为'yes',则整个集群中止接受操做;若是此参数设置为'no',则集群依然为可达节点上的key提供读操做。
  10. slowlog-log-slower-than 10000
     Redis慢查询超时时间,是指命令执行的实际时间,单位微秒,默认为1s。
  11. slowlog-max-len 128
     慢查询日志的队列长度。长度没有限制,会消耗内存,能够经过SLOWLOG RESET回收内存。
  12. 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。
  1. 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
  1. hash-max-ziplist-entries 512
     当hash表中元素(条目)总个数没有超过设定数量时,采用高效内存数据结构来节省空间。
  2. hash-max-ziplist-value 64
     当hash表中每一个value的长度不超过指定字节时,采用高效内存数据结构来节省空间。
  3. list-max-ziplist-size -2算法

  4. list-compress-depth 0数据库

  5. set-max-intset-entries 512
     set的元素若是所有是整数(10进制),且为64位有符号整数,则采用特殊编码方式,该项设置当set使用这种编码方式的最大长度。
  6. zset-max-ziplist-entries 128
     当zset条目总个数没有超过设定数量时,采用高效内存数据结构来节省空间。
  7. zset-max-ziplist-value 64
     当zset的value的长度不超过指定字节时,采用高效内存数据结构来节省空间。
  8. hll-sparse-max-bytes 3000
     HyperLogLog稀疏表示字节限制,这个限制包含了16个字节的头部,当一个HyperLogLog使用稀疏表示超过了这个限制,就会转到稠密表示上,建议值为3000.
  9. activerehashing yes
     每100毫秒,Redis会用1毫秒的时间对Hash表进行从新Hash。
     Redis采用懒惰Hash方式:操做Hash越多,则从新Hash的可能越多,若根本就不操做Hash,则不会从新Hash。
     默认每秒10次从新Hash主词典,释放可能释放的内存。
     从新Hash会形成延时,大概为2毫秒,若对延迟要求较高,则设置为no,禁止从新Hash。但可能会浪费不少内存。
  10. 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来禁用该功能。
  11. hz 10
     Redis调用内部函数执行的后台任务频率。后台任务好比:清楚过时数据、客户端超时连接等。
     默认为10,取值范围1~500,对延迟要求很低的能够设置超过100以上。
  12. aof-rewrite-incremental-fsync yes
     当重写AOF文件是,若是启用该选项,则文件每生成32M数据会被同步。为了增量写入硬盘而且避免延迟高峰。安全

相关文章
相关标签/搜索