点击关注Coding小暮,获取更多优质内容哦

Redis配置文件的讲解,今天将会全部讲完。先来个前文回顾:

吐血整理Redis配置大全(一)

Redis配置大全(二)

redisconfig配置类配置参数 redis常用配置_redisconfig配置类配置参数

本篇内容包含:

  1. 主动碎片整理
  2. 安全
  3. 客户端配置
  4. 懒惰删除
  5. RDB快照
  6. AOF追加模式
  7. LUA脚本
  8. 延迟监视器

主动碎片整理

主动碎片整理允许Redis服务器压缩内存中的小分配和数据回收之间的空间,从而允许收回内存。需要了解的重要事项:

  1. 默认情况下,此功能是禁用的,并且只有当你编译Redis使用我们随Redis源代码一起发布的Jemalloc副本时才有效。这是Linux版本的默认设置。
  2. 如果没有碎片问题,永远不需要启用此功能。
  3. 一旦遇到碎片问题,您可以在需要时使用命令“CONFIG SET activedefrag yes”启用该特性。
  4. 配置参数可以微调碎片整理过程的行为。如果您不确定它们的含义,那么最好保持默认值不变。
activedefrag yes

activedefrag yes

启用活动碎片整理

active-defrag-ignore-bytes 100mb

active-defrag-ignore-bytes 100mb

启动活动碎片整理所需的碎片浪费最少

active-defrag-threshold-lower 10

active-defrag-threshold-lower 10

启动活动碎片整理的最小碎片百分比

active-defrag-threshold-upper 100

active-defrag-threshold-upper 100

内存碎片超过 100%,则尽最大努力整理

active-defrag-cycle-min 25

active-defrag-cycle-min 25

磁盘碎片整理的最小工作量(CPU百分比)

active-defrag-cycle-max 75

active-defrag-cycle-max 75

磁盘碎片整理的最大工作量(CPU百分比)

安全

requirepass foobared

requirepass foobared

要求客户端在执行任何命令之前,必须先执行 AUTH ,在不信任其他人可以访问运行redis服务器的主机的环境中,这可能很有用。

rename-command CONFIG ""

rename-command CONFIG ""

命令重命名。如果将一个命令修改为空字符串,则改命令就相当于被抹杀掉了。在生产环境中,会有部分命令使用 rename-command 来重置掉,例如:keys、flushdb、flushall、config等等。

客户端配置

maxclients 10000

maxclients 10000

设置同时连接的客户端的最大数量。默认情况下,此限制设置为10000个客户端,但是如果Redis服务器无法读取配置进程文件限制以允许指定的限制,则允许的最大客户端数将设置为当前文件限制减去32(因为Redis保留了一些文件描述符供内部使用)。一旦达到限制,Redis将关闭所有新连接,并发送错误“max number of clients reached”。

懒惰删除

Redis有两个原语来删除键。一个叫做DEL,是对象的阻塞删除。这意味着服务器停止处理新命令,以同步方式回收与对象关联的所有内存。如果删除的键与一个小对象相关联,那么执行DEL命令所需的时间非常少,与Redis中大多数其他O(1)或O(log_N)命令相当。但是,如果该键与包含数百万个元素的聚合值相关联,服务器可能会阻塞很长时间(甚至几秒钟)以完成操作。出于上述原因,Redis还提供了非阻塞删除原语,如UNLINK(非阻塞DEL)和FLUSHALL和FLUSHDB命令的ASYNC选项,以便在后台回收内存。这些命令在固定的时间内执行。另一个线程将尽可能快地递增地释放后台的对象。Redis在以下场景中会主动删除对象:

  1. 在收回时,由于maxmemory和maxmemory策略配置,以便为新数据腾出空间,而不会超过指定的内存限制。
  2. key过期原因:必须从内存中删除一个具有超时时间的key(请参阅 EXPIRE 命令)。
  3. 在一个已存在的key上执行命令。例如,RENAME命令可以在旧key内容被另一个替换时删除它。类似地,SUNIONSTORE或SORT with STORE选项可以删除现有的键。SET命令本身删除指定键的旧内容,以便用新的字符串替换它。
  4. 在复制过程中,当从库和它的主库执行完全的重新同步时,为了加载刚刚传输的RDB文件,整个数据库的内容被删除。

在上述所有情况下,删除对象的方式默认是阻塞的,比如:DEL 命令。然而,你可以具体配置每种情况,以代替以非阻塞的方式(UNLINK 命令)释放内存。

lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
slave-lazy-flush no

lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
slave-lazy-flush no

RDB快照

save 900 1
save 300 10
save 60 10000

save 900 1
save 300 10
save 60 10000

快照创建的频率。saveN  M,seconds 秒 changes 改动, 如果在 N 秒内,有M次改动,则开始创建快照。

stop-writes-on-bgsave-error yes

stop-writes-on-bgsave-error yes

当RDB保存故障时,不影响正常的写入

rdbcompression yes

rdbcompression yes

.rdb数据库时使用LZF压缩字符串对象

rdbchecksum yes

rdbchecksum yes

CRC64校验,使该格式更能抵抗损坏,但是在保存和加载RDB文件时会付出一定的性能损耗(大约10%),因此可以禁用该格式以获得最佳性能。

dbfilename dump.rdb

dbfilename dump.rdb

备份数据的文件名

dir ./

dir ./

备份文件目录。该配置指定了 ${dbfilename} 所在的目录,AOF生成的 Append 文件也会存储在此目录。

AOF追加模式

追加模式是在.aof文件中追加写入执行过的命令。这种备份方案更加的安全,如果发生服务断电,Redis最多只是丢失了1秒钟的写操作。AOF和RDB持久性可以同时启用,

appendonly yes

appendonly yes

启用aof

appendfilename "appendonly.aof"

appendfilename "appendonly.aof"

aof文件名

# appendfsync always
appendfsync everysec
# appendfsync no

# appendfsync always
appendfsync everysec
# appendfsync no

fsync()调用告诉操作系统立即将数据写入磁盘,而不是等待输出缓冲区中的更多数据。有些操作系统真的会刷新磁盘上的数据,有些其他操作系统只会尝试尽快这样做。Redis支持三种不同的模式:

  • no:不要fsync,让操作系统在需要的时候刷新数据,性能较高。
  • always: fsync每次写入仅追加日志后。性能会有所损耗,安全性更高。
  • everysec: fsync每秒钟只进行一次。折中方案。

如果不确定应该使用哪个,使用“everysec”。

no-appendfsync-on-rewrite no

no-appendfsync-on-rewrite no

当AOF fsync策略设置为always或everysec,后台保存进程(后台保存或AOF log后台重写)对磁盘执行大量I/O操作时,在某些Linux配置中,Redis可能会在fsync()调用上阻塞过长时间。注意,目前还没有解决这个问题的办法,因为即使在不同的线程中执行fsync也会阻塞同步 write(2)  调用。为了缓解这个问题,可以使用 no-appendfsync-on-rewrite 来防止在BGSAVE或BGREWRITEAOF正在运行时在主进程中调用fsync()。如果你有延迟问题,把它改为“yes”,否则就保留“no”。从安全性的角度来看,这是最安全的选择。

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

设置aof文件滚动大小,如果为0的话,就是禁止滚动生生aof文件

aof-load-truncated yes

aof-load-truncated yes

Redis启动时,可能会发现AOF文件在最后被截断。这种情况可能发生在Redis所在的系统崩溃时,特别是在没有使用data=ordered选项的情况下。当这种情况发生时,Redis可以退出并抛出错误,或者加载尽可能多的数据(现在的默认值)并在最后发现AOF文件被截断时启动。下面的选项控制这种行为。如果aof-load-truncated设置为yes,则将加载截短的AOF文件,并且Redis服务器将开始发出日志以将事件通知用户。否则,如果该选项设置为no,则服务器将中止并显示错误并拒绝启动。如果该选项设置为no,则用户需要在重新启动服务器之前使用“redis-check-aof”程序修复AOF文件。

aof-use-rdb-preamble no

aof-use-rdb-preamble no

当重写AOF文件时,Redis可以在AOF文件中使用RDB前缀来更快地重写和恢复。当打开这个选项时,重写的AOF文件由两个不同的节组成:

[RDB file][AOF fail]

Redis启动时候,先加载RDB文件,在根据RDB的尾部时间加载AOF文件。

LUA脚本

lua-time-limit 5000

lua-time-limit 5000

Lua脚本的最大执行时间(毫秒)。如果达到了最大执行时间,Redis会记录一个脚本在超过最大允许时间后仍在执行,并开始回复一个错误的查询。当长时间运行的脚本超过最大执行时间时,可以使用KILL和SHUTDOWN NOSAVE命令终止。第一个可以用来停止尚未调用write命令的脚本。第二种方法是在脚本已经发出了write命令但用户不想等待脚本自然终止的情况下停止的唯一方法。将其设置为0或负值,可以无限制地执行而不发出警告。

延迟监视器

latency-monitor-threshold 0

latency-monitor-threshold 0

Redis延迟监视子系统在运行时采样不同的操作,以便收集与Redis实例可能的延迟来源相关的数据。通过LATENCY命令,可以打印图形并获得报告的用户可以使用此信息。默认值为0表示关闭延迟监视器。如果在生产环境中需要临时启用的话,可以使用:

CONFIG SET latency-monitor-threshold  命令启用延迟监控器。