Redis配置大全
Posted Coding小暮
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis配置大全相关的知识,希望对你有一定的参考价值。
“ 点击关注Coding小暮,获取更多优质内容哦”
Redis配置文件的讲解,今天将会全部讲完。先来个前文回顾:
本篇内容包含:
-
主动碎片整理 -
安全 -
客户端配置 -
懒惰删除 -
RDB快照 -
AOF追加模式 -
LUA脚本 -
延迟监视器
主动碎片整理
主动碎片整理允许Redis服务器压缩内存中的小分配和数据回收之间的空间,从而允许收回内存。需要了解的重要事项:
-
默认情况下,此功能是禁用的,并且只有当你编译Redis使用我们随Redis源代码一起发布的Jemalloc副本时才有效。这是Linux版本的默认设置。 -
如果没有碎片问题,永远不需要启用此功能。 -
一旦遇到碎片问题,您可以在需要时使用命令“CONFIG SET activedefrag yes”启用该特性。 -
配置参数可以微调碎片整理过程的行为。如果您不确定它们的含义,那么最好保持默认值不变。
activedefrag yes
启用活动碎片整理
active-defrag-ignore-bytes 100mb
启动活动碎片整理所需的碎片浪费最少
active-defrag-threshold-lower 10
启动活动碎片整理的最小碎片百分比
active-defrag-threshold-upper 100
内存碎片超过 100%,则尽最大努力整理
active-defrag-cycle-min 25
磁盘碎片整理的最小工作量(CPU百分比)
active-defrag-cycle-max 75
磁盘碎片整理的最大工作量(CPU百分比)
安全
requirepass foobared
要求客户端在执行任何命令之前,必须先执行 AUTH
rename-command CONFIG ""
命令重命名。如果将一个命令修改为空字符串,则改命令就相当于被抹杀掉了。在生产环境中,会有部分命令使用 rename-command 来重置掉,例如:keys、flushdb、flushall、config等等。
客户端配置
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在以下场景中会主动删除对象:
-
在收回时,由于maxmemory和maxmemory策略配置,以便为新数据腾出空间,而不会超过指定的内存限制。 -
key过期原因:必须从内存中删除一个具有超时时间的key(请参阅 EXPIRE 命令)。 -
在一个已存在的key上执行命令。例如,RENAME命令可以在旧key内容被另一个替换时删除它。类似地,SUNIONSTORE或SORT with STORE选项可以删除现有的键。SET命令本身删除指定键的旧内容,以便用新的字符串替换它。 -
在复制过程中,当从库和它的主库执行完全的重新同步时,为了加载刚刚传输的RDB文件,整个数据库的内容被删除。
在上述所有情况下,删除对象的方式默认是阻塞的,比如:DEL 命令。然而,你可以具体配置每种情况,以代替以非阻塞的方式(UNLINK 命令)释放内存。
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
stop-writes-on-bgsave-error yes
当RDB保存故障时,不影响正常的写入
rdbcompression yes
.rdb数据库时使用LZF压缩字符串对象
rdbchecksum yes
CRC64校验,使该格式更能抵抗损坏,但是在保存和加载RDB文件时会付出一定的性能损耗(大约10%),因此可以禁用该格式以获得最佳性能。
dbfilename dump.rdb
备份数据的文件名
dir ./
备份文件目录。该配置指定了 ${dbfilename} 所在的目录,AOF生成的 Append 文件也会存储在此目录。
AOF追加模式
追加模式是在.aof文件中追加写入执行过的命令。这种备份方案更加的安全,如果发生服务断电,Redis最多只是丢失了1秒钟的写操作。AOF和RDB持久性可以同时启用,
appendonly yes
启用aof
appendfilename "appendonly.aof"
aof文件名
# appendfsync always
appendfsync everysec
# appendfsync no
fsync()调用告诉操作系统立即将数据写入磁盘,而不是等待输出缓冲区中的更多数据。有些操作系统真的会刷新磁盘上的数据,有些其他操作系统只会尝试尽快这样做。Redis支持三种不同的模式:
-
no:不要fsync,让操作系统在需要的时候刷新数据,性能较高。 -
always: fsync每次写入仅追加日志后。性能会有所损耗,安全性更高。 -
everysec: fsync每秒钟只进行一次。折中方案。
如果不确定应该使用哪个,使用“everysec”。
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
设置aof文件滚动大小,如果为0的话,就是禁止滚动生生aof文件
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文件时,Redis可以在AOF文件中使用RDB前缀来更快地重写和恢复。当打开这个选项时,重写的AOF文件由两个不同的节组成:
[RDB file][AOF fail]
Redis启动时候,先加载RDB文件,在根据RDB的尾部时间加载AOF文件。
LUA脚本
lua-time-limit 5000
Lua脚本的最大执行时间(毫秒)。如果达到了最大执行时间,Redis会记录一个脚本在超过最大允许时间后仍在执行,并开始回复一个错误的查询。当长时间运行的脚本超过最大执行时间时,可以使用KILL和SHUTDOWN NOSAVE命令终止。第一个可以用来停止尚未调用write命令的脚本。第二种方法是在脚本已经发出了write命令但用户不想等待脚本自然终止的情况下停止的唯一方法。将其设置为0或负值,可以无限制地执行而不发出警告。
延迟监视器
latency-monitor-threshold 0
Redis延迟监视子系统在运行时采样不同的操作,以便收集与Redis实例可能的延迟来源相关的数据。通过LATENCY命令,可以打印图形并获得报告的用户可以使用此信息。默认值为0表示关闭延迟监视器。如果在生产环境中需要临时启用的话,可以使用:
CONFIG SET latency-monitor-threshold <milliseconds>
以上是关于Redis配置大全的主要内容,如果未能解决你的问题,请参考以下文章