Redis 配置文件详解

Redis 配置文件详解

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

  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 1234

  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数据会被同步。为了增量写入硬盘并且避免延迟高峰。

posted @ 2016-09-23 17:27  Orgliny  阅读(945)  评论(0编辑  收藏  举报