Redis配置文件详解(二)

前言

  在Redis的解压目录下有个重要的配置文件redis.conf,很多重要的功能配置都是在这个文件下进行配置。

配置文件

 1. 开头说明

 

 这里说的是:需要注意的是后面需要使用内存大小时,可以指定单位,通常是以 k,gb,m的形式出现,并且单位不区分大小写

 2. INCLUDES(包含)

  Redis只有一个配置文件,如果多人进行开发维护,那么就需要这要的配置文件,这时多个配置文件通过 include /path/to/local.conf 配置进来,而原本的redis.conf配置文件就作为一个总配置(总闸)。

  另外需要注意,如果将此配置写在redis.conf文件的开头,那么后面的配置覆盖 引入文件的配置;如果想以引入文件配置为主,则将include配置redis.conf文件的末尾

3. NETWORK(网络)

ps:配置较长,只截取关键部分,下同

bind:绑定redis服务器网卡IP,默认127.0.0.1本地回环地址。这样配置后,访问redis服务只可通过本机的客户端连接,而无法通过远程连接。如果bind选项为空的话,那会接受所有来自可用网络接口连接

port:指定redis运行的端口,默认6379。由于Redis是单线程模型,因此单机开多个Redis进程的时候会修改端口

timeout:设置客户端连接时的超时时间,单位为。当客户端在这段时间内没有发出任何指令,那么关闭该连接。默认值0,表示不关闭。

tcp-keepalive:单位是秒,表示周期性使用SO_KEEPALIVE检测客户端是否处于健康状态,避免服务器一直阻塞,官方给出的建议是300s,如果设置0,则不会周期性检测。

⑤ tcp-backlog:进程还没接收TCP连接的队列数。默认511,意思就是可存放511个未接收的连接,如果接收了,就不在这个队列。

protected-mode: 设置外部网络连接redis服务,默认yes

  • 1、关闭protected-mode模式,此时外部网络可以直接访问
  • 2、开启protected-mode保护模式,需配置bind ip或者设置访问密码

4.GENERAL(常规)

daemonize:设置为yes表示指定Redis以守护进程的方式启动(后台启动)。默认no。此配置只在Linux系统下生效Windows不支持

supervised:可以通过upstart和systemd管理Redis守护进程。同样Windows不支持此配置

  • supervised no - 没有监督互动
  • supervised upstart - 通过将Redis置于SIGSTOP模式来启动信号
  • supervised systemd - signal systemd将READY = 1写入$ NOTIFY_SOCKET
  • supervised auto - 检测upstart或systemd方法基于 UPSTART_JOB或NOTIFY_SOCKET环境变量

③ pidfile:配置PID文件路径,当Redis作为守护进程运行的时候,它会把pid默认写到指定文件中。Windows不支持此配置

loglevel:定义日志级别。默认值为notice,有四种取值,如下

  • debug:记录大量日志信息,使用于开发、测试阶段
  • verbose:较多日志信息
  • notice:适量日志信息,使用生产环境
  • warning:仅有部分重要,关键信息才会被记录

logfile:log日志文件地址,默认打印在命令行终端的窗口上

databases:设置数据库的数目。默认值是 16,也就是说默认Redis有16个数据库。默认使用数据库是DB 0 ,可以在每个连接上使用select  <dbid> 命令选择一个不同的数据库,dbid是一个介于0到databases - 1 之间的数值。

5.SNAPSHOTTING(快照)

这里的配置主要用来做持久化操作。

 

 1. save:这里是用来配置触发Redis的持久化条件,也就是什么时候将内存中的数据保存到硬盘上。默认如下

  • save 900 1:表示900 秒内如果至少有 1 个 key 的值变化,则保存
  • save 300 10:表示300 秒内如果至少有 10 个 key 的值变化,则保存
  • save 60 10000:表示60 秒内如果至少有 10000 个 key 的值变化,则保存

  当然如果你只是用Redis的缓存功能,不需要持久化,那么你可以注释掉所有的 save 行来停用保存功能。可以直接一个空字符串来实现停用:save ""

2. stop-writes-on-bgsave-error:默认值yes

  当启用了RDB且最后一次后台保存数据失败,Redis是否停止接收数据。

  这会让用户意识到数据没有正确持久化到磁盘上,否则没有人会注意到灾难(disaster)发生了。

  如果Redis重启了,那么又可以重新开始接收数据了

3. rdbcompression:默认yes。对于存储到硬盘中的快照,可以设置是否进行压缩存储。若是,Redis采用LZF算法进行压缩。若你不想消耗CPU来进行压缩,可设置关闭此功能,但存储的快照数据会比较大

4. rdbchecksum:默认yes。在存储快照后,我们还可以让redis使用CRC64算法来进行数据校验,但是这样做会增加大约10%的性能消耗,如果希望获取到最大的性能提升,可以关闭此功能

5. dbfilename :设置快照的文件名,默认是 dump.rdb

6. dir: 设置快照文件的存放路径,这个配置项一定是个目录,而不能是文件名。使用上面的 dbfilename 作为保存的文件名。

 6. REPLICATION(主从复制)

 

1. slaveof <masterip> <masterport>:主从复制,使用 slaveof 来让一个 redis 实例成为另一个reids 实例的副本默认关闭注意这个只需要在 从机上配置

2. masterauth <master-password>:如果 master 需要密码认证,就在这里设置,默认不设置。

3. slave-serve-stale-data:默认值为yes。当一个 slave 与 master 失去联系,或者复制正在进行的时候,slave 可能会有两种表现:

  • 如果为 yes ,slave 仍然会应答客户端请求,但返回的数据可能是过时,或者数据可能是空的在第一次同步的时候 
  • 如果为 no ,在你执行除了 info he salveof 之外的其他命令时,slave 都将返回一个 "SYNC with master in progress" 的错误。

4. slave-read-only:默认值为yes。即Slave是否为只读Redis。配置Redis的Slave实例是否接受写操作。

5. repl-diskless-sync:主从数据复制是否使用无硬盘复制功能。默认值为no

6. repl-diskless-sync-delay延迟时间为单位,默认为5秒

  当启用无硬盘备份,服务器等待一段时间后才会通过套接字向从站传送RDB文件,这个等待时间是可配置的。  这一点很重要,因为一旦传送开始,就不可能再为一个新到达的从站服务。从站则要排队等待下一次RDB传送。因此服务器等待一段  时间以期更多的从站到达。要关掉这一功能,只需将它设置为0秒,传送会立即启动。默认值为5

7.repl-disable-tcp-nodelay: 默认值为no,同步之后是否禁用从站上的TCP_NODELAY。

   如果你选择yes,redis会使用较少量的TCP包和带宽向从站发送数据。但这会导致在从站增加一点数据的延时。  Linux内核默认配置情况下最多40毫秒的延时。如果选择no,从站的数据延时不会那么多,但备份需要的带宽相对较多。默认情况下我们将潜在因素优化,但在高负载情况下或者在主从站都跳的情况下,把它切换为yes是个好主意。

8. repl-ping-slave-period:  从站redis会周期性向主站redis发出PING包,你可以通过repl_ping_slave_period指令来控制其周期,默认是10秒

9. repl-timeout: 设置备份的超时时间。

  • 从从站的角度,同步期间的批量传输的I/O
  • 从站角度认为的主站超时(数据,ping)
  • 站角度认为的从站超时(REPLCONF ACK pings)

确认这些值比定义的repl-ping-slave-period要大,否则每次主站和从站之间通信低速时都会被检测为超时。

10. repl-backlog-size设置备份的工作储备大小。默认1mb.
  工作储备是一个缓冲区,当从站断开一段时间的情况时,它替从站接受数据,因此当从站重连时,通常不需要完全备份,只需要一个部分同步就可以,即把从站断开时错过的一部分数据接收。

  工作储备越大,从站可以断开并稍后执行部分同步的断开时间就越长只要有一个从站连接,就会立刻分配一个工作储备。

11. repl-backlog-ttl:主站有一段时间没有与从站连接,对应的工作储备就会自动释放。这个选项用于配置释放前等待的秒数,秒数从断开的那一刻开始计算,值为0表示不释放

 12.  slave-priority从站优先级是可以从redis的INFO命令输出中查到的一个整数。当主站不能正常工作时,redis sentinel使用它来选择一个从站并将它提升为主站

  低优先级的从站被认为更适合于提升,因此如果有三个从站优先级分别是10、 100、25,sentinel会选择优先级为10的从站,因为它的优先级最低。 然而优先级值为0的从站不能执行主站的角色,因此优先级为0的从站永远不会被redis sentinel提升。 默认优先级是100

13. min-slaves-to-write 3 

   min-slaves-max-lag 10

   如果想要至少3个从站且延迟少于10秒,如上配置即可。

  主站可以停止接受写请求,当与它连接的从站少于N个,滞后少于M秒,N个从站必须是在线状态。
  延迟的秒数必须<=所定义的值,延迟秒数是从最后一次收到的来自从站的ping开始计算。ping通常是每秒一次。
  这一选项并不保证N个备份都会接受写请求,但是会限制在指定秒数内由于从站数量不够导致的写操作丢失的情况。

7. SECURITY(安全)

1. requirepass foobared:设置redis连接密码

2. rename-command:命令重命名,为了安全考虑,可以将某些重要的、危险的命令重命名。
  当你把某个命令重命名成空字符串的时候就等于取消了这个命令。

一些危险命令如下:

  flushdb(清空数据库)、flushall(清空所有记录)、config(客户端连接后可配置服务器)、

  keys(客户端连接后可查看所有存在的键)

作为服务端redis-server,常常需要禁用以上命令来使得服务器更加安全,禁用的具体做法是是:

  • rename-command FLUSHALL "":也可以保留命令但是不能轻易使用,重命名这个命令即可:
  • rename-command FLUSHALL abcdefg:这样,重启服务器后则需要使用新命令来执行操作,否则服务器会报错unknown command。

8. LIMITS(范围限制)

 

1. maxclients:设置客户端最大并发连接数默认无限制,Redis可以同时打开的客户端连接数为Redis进程可以打开的最大文件描述符数-32(redis server自身会使用一些),如果设置 maxclients为0 表示不作限制

  当客户端连接数到达限制时,Redis会关闭新的连接并向客户端返回max number of clients reached错误信息。

2. maxmemory:指定Redis最大内存限制。

  Redis在启动时会把数据加载到内存中达到最大内存后,Redis会尝试清除已到期或即将到期的key

  当此方法处理后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作

  Redis新的vm机制,会把Key存放内存,Value会存放在swap区,格式:maxmemory <bytes>

3. maxmemory-policy: 当内存使用达到最大值时,redis使用清除策略。有以下几种可以选择:

  • volatile-lru   利用LRU算法移除设置过过期时间的key (LRU:最近使用 Least Recently Used ) 
  • allkeys-lru   利用LRU算法移除任何key 
  • volatile-random 移除设置过过期时间的随机key 
  • allkeys-random  移除随机ke
  • volatile-ttl   移除即将过期的key(minor TTL) 
  • noeviction  noeviction   不移除任何key,只是返回一个写错误 ,默认选项

4. maxmemory-samples :LRU 和 minimal TTL 算法都不是精准的算法,但是相对精确的算法(为了节省内存)
  随意你可以选择样本大小进行检,redis默认选择3个样本进行检测,你可以通过maxmemory-samples进行设置样本数。

9. APPEND ONLY MODE(追加模式)

 

 1. appendonly:默认值no。redis使用的是rdb方式持久化,这种方式在许多应用中已经足够用了。

  但是redis如果中途宕机,会导致可能几分钟的数据丢失,根据save来策略进行持久化,Append Only File是另一种持久化方式,  可以提供更好的持久化特性。Redis会把每次写入的数据在接收后都写入appendonly.aof文件,每次启动时Redis都会先把这个文件的数据读入内存里,先忽略RDB文件。

2. appendfilename :aof文件名,默认是"appendonly.aof"

3. appendfsyncaof持久化策略配置

  • no:表示不执行fsync,由操作系统保证数据同步到磁盘,速度最快,默认;
  • always:表示写入都执行fsync,以保证数据同步到磁盘;
  • everysec:表示每秒执行一次fsync,可能会导致丢失这1s数据。

4. no-appendfsync-on-rewrite:

  在aof重写或者写入rdb文件的时候,会执行大量IO,此时对于everysec和always的aof模式来说,执行fsync会造成阻塞过长时间,no-appendfsync-on-rewrite字段设置为默认设置为no。

  如果对延迟要求很高的应用,这个字段可以设置为yes,否则还是设置为no,这样对持久化特性来说这是更安全的选择。

  设置为yes表示rewrite期间对新写操作不fsync,暂时存在内存中,等rewrite完成后再写入,默认为no,建议yes

  Linux的默认fsync策略是30秒。可能丢失30秒数据。默认值为no。

5. auto-aof-rewrite-percentage:默认值为100

  aof自动重写配置,当目前aof文件大小超过上一次重写的aof文件大小的百分之多少进行重写,即当aof文件增长到一定大小的时候,Redis能够调用bgrewriteaof对日志文件进行重写。当前AOF文件大小上次日志重写得到AOF文件大小二倍(设置为100)时,自动启动新的日志重写过程

6. auto-aof-rewrite-min-size:64mb。设置允许重写的最小aof文件大小,避免了达到约定百分比但尺寸仍然很小的情况还要重写。

7. of-load-truncated:默认yes。aof文件可能在尾部是不完整的,当redis启动的时候,aof文件的数据被载入内存。

  重启可能发生在redis所在的主机操作系统宕机后,尤其在ext4文件系统没有加上data=ordered选项,出现这种现象  redis宕机或者异常终止不会造成尾部不完整现象,可以选择让redis退出,或者导入尽可能多的数据。

  如果选择的是yes,当截断的aof文件被导入的时候,会自动发布一个log给客户端然后load。

  如果是no,用户必须手动redis-check-aof修复AOF文件才可以。

10. LUA SCRIPTING(LUA脚本)

lua-time-limit:一个lua脚本执行的最大时间,单位为ms。默认值为5000.

11. REDIS CLUSTER(redis集群)

 

1. cluster-enabled:集群开关,默认是不开启集群模式。

2. cluster-config-file:集群配置文件的名称,每个节点都有一个集群相关的配置文件,持久化保存集群的信息。

   这个文件并不需要手动配置,这个配置文件有Redis生成并更新,每个Redis集群节点需要一个单独的配置文件。请确保与实例运行的系统中配置文件名称不冲突。默认配置为nodes-6379.conf。

3. cluster-node-timeout:可以配置值为15000。节点互连超时的阀值,集群节点超时毫秒数。

4. cluster-slave-validity-factor :可以配置值为10。判断slave节点与master断线的时间是否过长。

  判断方法是:比较slave断开连接的时间和(node-timeout * slave-validity-factor) + repl-ping-slave-period

    如果节点超时时间为三十秒, 并且slave-validity-factor10,假设默认的repl-ping-slave-period是10秒,即如果超过310秒slave将不会尝试进行故障转移。

  在进行故障转移的时候,全部slave都会请求申请为master,但是有些slave可能与master断开连接一段时间了,  导致数据过于陈旧,这样的slave不应该被提升为master。该参数就是用来判断slave节点与master断线的时间是否过长。

5. cluster-migration-barrier:可以配置值为1。master的slave数量大于该值,slave才能迁移到其他孤立master上,如这个参数若被设为2,那么只有当一个主节点拥有2 个可工作的从节点时,它的一个从节点会尝试迁移。

6. cluster-require-full-coverage:默认情况下,集群全部的slot由节点负责,集群状态才为ok,才能提供服务。

  设置为no,可以在slot没有全部分配的时候提供服务

  不建议打开该配置,这样会造成分区的时候,小分区的master一直在接受写请求,而造成很长时间数据不一致。

12.SLOW LOG(慢日志)

1. slowlog-log-slower-than :用来记录redis运行中执行比较慢的命令耗时。

  当命令的执行超过了指定时间,就记录在slow log中,slog log保存在内存中,所以没有IO操作。
  执行时间比slowlog-log-slower-than大的请求记录到slowlog里面,单位是微秒,所以1000000就是1秒。
   注意负数时间会禁用慢查询日志,而0则会强制记录所有命令

2. slowlog-max-len 慢查询日志长度。当一个新的命令被写进日志的时候,最老的那个记录会被删掉,这个长度没有限制。只要有足够的内存就行,你可以通过 SLOWLOG RESET 来释放内存。

13. LATENCY MONITOR(延迟监控)

latency-monitor-threshold

  延迟监控功能是用来监控redis中执行比较缓慢的一些操作,用LATENCY打印redis实例在跑命令时的耗时图表。
  只记录大于等于下边设置的值的操作,0的话,就是关闭监视
  默认延迟监控功能是关闭的,如果你需要打开,也可以通过CONFIG SET命令动态设置。

 14. EVENT NOTIFICATION(事件通知)

 notify-keyspace-events: 键空间通知使得客户端可以通过订阅频道或模式,来接收那些以某种方式改动了 Redis 数据集的事件。因为开启键空间通知功能需要消耗一些 CPU ,所以在默认配置下,该功能处于关闭状态

 15.ADVANCED CONFIG(高级配置)

 

 1. hash-max-ziplist-entries 512

   hash类型的数据结构在编码上可以使用ziplist和hashtable。
   ziplist的特点就是文件存储(以及内存存储)所需的空间较小,在内容较小时,性能和hashtable几乎一样。
   因此redis对hash类型默认采取ziplist。如果hash中条目的条目个数或者value长度达到阀值,将会被重构为hashtable。
   这个参数指的是ziplist中允许存储的最大条目个数,,默认为512,建议为128

2. hash-max-ziplist-value 64

  ziplist中允许条目value值最大字节数,默认为64,建议为1024

3. list-max-ziplist-size -2

  当取正值的时候,表示按照数据项个数来限定每个quicklist节点上的ziplist长度。比如,当这个参数配置成5的时候,表示每个quicklist节点的ziplist最多包含5个数据项。
  当取负值的时候,表示按照占用字节数来限定每个quicklist节点上的ziplist长度。这时,它只能取-1到-5这五个值,每个值含义如下:
      -5: 每个quicklist节点上的ziplist大小不能超过64 Kb。(注:1kb => 1024 bytes)
      -4: 每个quicklist节点上的ziplist大小不能超过32 Kb。
      -3: 每个quicklist节点上的ziplist大小不能超过16 Kb。
      -2: 每个quicklist节点上的ziplist大小不能超过8 Kb。(-2是Redis给出的默认值)
      -1: 每个quicklist节点上的ziplist大小不能超过4 Kb。

4. list-compress-depth 0

  这个参数表示一个quicklist两端不被压缩的节点个数。
  注:这里的节点个数是指quicklist双向链表的节点个数,而不是指ziplist里面的数据项个数。
  实际上,一个quicklist节点上的ziplist,如果被压缩,就是整体被压缩的。
  参数list-compress-depth的取值含义如下:
      0: 是个特殊值,表示都不压缩。这是Redis的默认值。
      1: 表示quicklist两端各有1个节点不压缩,中间的节点压缩。
      2: 表示quicklist两端各有2个节点不压缩,中间的节点压缩。
      3: 表示quicklist两端各有3个节点不压缩,中间的节点压缩。
  依此类推…
  由于0是个特殊值,很容易看出quicklist的头节点和尾节点总是不被压缩的,以便于在表的两端进行快速存取。

5. list-compress-depth 0

   数据量小于等于set-max-intset-entries用intset,大于set-max-intset-entries用set

6. zset-max-ziplist-entries 128

    zset-max-ziplist-value 64

   数据量小于等于zset-max-ziplist-entries用ziplist,大于zset-max-ziplist-entries用zset

7.activerehashing yes

  Redis将在每100毫秒时使用1毫秒的CPU时间来对redis的hash表进行重新hash,可以降低内存的使用。
  当你的使用场景中,有非常严格的实时性需要,不能够接受Redis时不时的对请求有2毫秒的延迟的话,把这项配置为no。
  如果没有这么严格的实时性要求,可以设置为yes,以便能够尽可能快的释放内存 

8. client-output-buffer-limit normal 0 0 0

   对客户端输出缓冲进行限制可以强迫那些不从服务器读取数据的客户端断开连接,用来强制关闭传输缓慢的客户端。
   对于normal client,第一个0表示取消hard limit,第二个0和第三个0表示取消soft limit,normal client默认取消限制,因为如果没有寻问,他们是不会接收数据的

 client-output-buffer-limit slave 256mb 64mb 60

   对于slave client和MONITER client,如果client-output-buffer一旦超过256mb,又或者超过64mb持续60秒,那么服务器就会立即断开客户端连接。

 client-output-buffer-limit pubsub 32mb 8mb 60

   对于pubsub client,如果client-output-buffer一旦超过32mb,又或者超过8mb持续60秒,那么服务器就会立即断开客户端连接。

9. hz 10redis执行任务的频率为1s除以hz

10. aof-rewrite-incremental-fsync yes

    在aof重写的时候,如果打开了aof-rewrite-incremental-fsync开关,系统会每32MB执行一次fsync。
    这对于把文件写入磁盘是有帮助的,可以避免过大的延迟峰值

猜你喜欢

转载自www.cnblogs.com/FondWang/p/12200465.html
今日推荐