Redis基础篇08 — 配置文件详解(三)

概述

本文紧跟着《Redis基础篇07 — 配置文件详解(二)》

LAZY FREEING 部分

LAZY FREEING 是从 Redis 4.0 引入的机制,可解释为 惰性删除延迟删除。这里的惰性指的是释放内存的操作交给后台线程异步处理,换言之,一个 key 真正意义上的删除是具有一定延迟性的。

在配置文件中的默认配置中,四个场景的配置均为 no,如下:

  • lazyfree-lazy-eviction no // 上一篇说过了逐出策略(删除策略),这里的场景对应的是——当 redis 运行内存超过了 maxmemory 参数的值,是否开启 惰性删除。
  • lazyfree-lazy-expire no // 对设置了过期时间的 key ,当过期之后,是否开启 惰性删除。
  • lazyfree-lazy-server-del no // 某些 命令(指令)会带有隐式 del 操作,比如 move、rename ,在这一场景下,是否开启惰性删除
  • replica-lazy-flush no // 在异步复制(主从同步、主从复制)场景中,当 slave 要与 master 进行全量数据同步时,在加载 RDB 文件之前,是否开启惰性删除。开启后, slave 会删除整个自身 db,然后加载 RDB 文件
  • lazyfree-lazy-user-del no //
  • lazyfree-lazy-user-flush no //

THREADED I/O 部分

从 Redis 6.0 版本开始,Redis 开始支持多线程,这一部分就是对线程 IO 的配置。

Redis 大部分的操作都是单线程的,但在某些情况下,需要在其他线程上执行。如果您的机器超过了 4 核,官方建议你开启多线程并至少预留 1 个核。请注意!当为线程 IO 配置为 8 或以上时,对性能的提升可能没有太多作用。例如,您的 CPU 是 4 核,则可以将 io-threads 参数配置为 2 或 3;您的 CPU 是 8 核的,则可以将 io-threads 参数配置为 6

  • io-threads 4 // 配置IO 线程数。默认情况下,该值为 1 (即一个主线程)。
  • io-threads-do-reads no // 默认情况下,线程只能进行 写 操作,您可以在这里将值配置为 yes,表示线程进行 读 操作。通常而言,不需要进行更改。

KERNEL OOM CONTROL 部分

在 GNU/Linux 上,当内存不足时,可以提示内核的 OOM Killer 应该首先结束掉哪些 Redis 进程。 OOM killer 即 Out of Memory Killer。

  • oom-score-adj no // 控制内核调度,其值可以是:
    • no
    • yes
    • absolute
    • relative
  • oom-score-adj-values 0 200 800 // 当 oom-score-adj 为 yes 时,该参数用于控制主进程、副本进程、后台进程的特定值。取值范围为 [-2000,20000],值越高,被 kill 的可能性越大。

KERNEL transparent hugepage CONTROL 部分

  • disable-thp yes // 是否关闭 THP (透明大页),THP 即 Transparent Huge Pages,是 Linux 内核在 2.6.38 中增加的特性,用来支持大内存页。默认即可

APPEND ONLY MODE 部分

Redis 的持久化方案有两种——RDB 和 AOF,默认情况下,开启 RDB 并且禁用 AOF,这里可以配置和 AOF 相关的参数。RDB 方案在许多场景中已经足够使用了,但可能会丢失几分钟的数据(取决于SNAPSHOTTING 部分 save 是如何配置的 )

AOF 是以日志追加的形式记录每个写操作(读操作不记录),当 Redis 实例重启后,会根据日志文件从头到尾的内容进行数据的重建。默认配置如下:

  • appendonly no // 是否开启 AOF 。同时开启 AOF 和 RDB是没有问题的,但是当 Redis 重启时,会优先使用 AOF 进行数据的重建
  • appendfilename "appendonly.aof" // AOF 的文件名前缀定义
  • appenddirname "appendonlydir" // AOF 目录定义,这个目录存放在 dir 参数定义的目录下,即 /usr/local/redis/DB/appendonlydir/
  • appendfsync everysec // 同步频率为每秒,即持久化到磁盘上,可能会丢失一秒的数据。值还可以是 no 和 always

随着时间的推移, AOF 日志文件越来越大,Redis 采用了一种叫做 重写(rewrite) 的机制来缓解存储和恢复的压力,相关的配置参数如下:

  • no-appendfsync-on-rewrite no //当主线程进行写操作和子进程进行重写操作时,两者都会操作磁盘,可能会出现阻塞的情况。设置为 no,表示不会丢失数据但是要忍受阻塞问题。为了数据的安全性,推荐配置为 no
  • auto-aof-rewrite-percentage 100 // 触发 Redis 重写 AOF 文件的条件之一,这里的 100 意思是 100%,也就是说,它会对比上一次重写 AOF 的文件大小,如果当前 AOF 文件的大小大于指定的百分比,则触发重写
  • auto-aof-rewrite-min-size 64mb // 触发重写的条件之一。当前触发重写的最小文件大小。请注意!只有两个条件同时满足,才会触发重写。
  • aof-load-truncated yes // 当 Redis 突然崩溃时,AOF 文件会出现被截断的情况。如果设置为 yes,表示 Redis 加载截断的 AOF 文件并通知用户该事件;如果为 no ,则拒绝启动,在重启 redis 之前需要使用 redis-check-aof 命令修复 AOF 文件。
  • aof-use-rdb-preamble yes // 是否开启混合持久化。如果开启,需要首先将 appendonly 设置为 yes ,这将导致 AOF 重写文件同时包含 RDB 格式和 AOF 格式。
  • aof-timestamp-enabled no // 是否开启时间戳(在 AOF 文件中记录时间戳注释),7.0 版本之后 Redis 可以支持 AOF 的时间戳,换言之,你可以基于时间点来恢复数据。小心!这会改变 AOF 文件的格式。

SHUTDOWN 部分

  • shutdown-timeout 10 // 应用在异步复制中。当执行 shutdown 命令后,slave 节点处理任务所需要的最长等待时间(以秒为单位)
  • shutdown-on-sigint default //当 Redis 接收到 SIGINT 或 SIGTERM 时,会启动关闭。默认情况下,如果配置了保存点,则会在阻塞操作中将 RDB 快照写入磁盘。值可以是 default、save、nosave、now、force 之一或任意组合(save 和 nosave 不能同时出现)

NON-DETERMINISTIC LONG BLOCKING COMMANDS 部分

  • lua-time-limit 5000
  • busy-reply-threshold 5000 // 在 Redis 开始处理或拒绝其他客户端之前,EVAL脚本、函数以及在某些情况下模块命令的最长时间(以毫秒为单位)。在 Redis 7 版本当中,这两个参数名称(lua-time-limit 和 busy-reply-threshold )都是同一个意思,属于别名的关系

REDIS CLUSTER 部分

Redis 集群的配置,暂时略过。

CLUSTER DOCKER/NAT support 部分

docker 版本或其他容器版本的 Redis 集群在网络方面配置,略过。

SLOW LOG 部分

同 MySQL 一样,Redis 也有自己的慢查询日志。慢查询日志主要用来分析当前的性能瓶颈。Redis 的慢查询日志保存在内存当中,默认处于开启状态。

  • slowlog-log-slower-than 10000 // 当大于该阈值时间(单位为微秒)时,才进行记录。如果为0,表示记录所有的命令
  • slowlog-max-len 128 // 记录命令的长度。当记录新命令时超过了该长度,最旧的命令将从队列中删除

LATENCY MONITOR 部分

延迟监控功能,Redis 会采样一些操作,以收集与 Redis 延迟相关的一些数据源,并且可将报告打印出来。

  • latency-monitor-threshold 0 //设置时间阈值(毫秒为单位),只有大于等于该延迟的时间阈值,才会被记录。设置为0,关闭延迟监控功能。

LATENCY TRACKING 部分

略过。

EVENT NOTIFICATION 部分

事件通知,略过。

ADVANCED CONFIG 部分

进阶部分,做调优时需要,这一部分略过。

ACTIVE DEFRAGMENTATION 部分

与内存碎片整理相关的配置参数。所谓碎片整理,就是指 Redis 长时间运行后,对内存当中产生的碎片和凌乱文件重新整理,形成连续的内存页并释放出一部分的内存。相关的参数如下:

  • activedefrag no // 默认注释行,是否开启主动碎片整理
  • active-defrag-ignore-bytes 100mb // 默认注释行,内存碎片整理的最小阈值
  • active-defrag-threshold-lower 10 // 默认注释行,内存碎片整理所需的最小百分比
  • active-defrag-threshold-upper 100 // 默认注释行,尽最大努力所能释放的内存百分比
  • active-defrag-cycle-min 1 // 默认注释行,执行碎片整理时,CPU 工作的最小百分比
  • active-defrag-cycle-max 25 // 默认注释行,执行碎片整理时,CPU 工作的最大百分比
  • active-defrag-max-scan-fields 1000 // 默认注释行,从主字典里扫描到的 set、hash、zset、list 字段能够处理的最大数目
  • jemalloc-bg-thread yes // 碎片整理的 jemalloc 线程是否允许在后台允许
  • server_cpulist 0-7:2 //
  • bio_cpulist 1,3 //
  • aof_rewrite_cpulist 8-11 //
  • bgsave_cpulist 1,10-11 //
  • ignore-warnings ARM64-COW-BUG // 默认注释行,在某些情况下,如果检测到系统处于坏状态,Redis会发出警告,甚至拒绝启动。可以通过设置该参数的值来抑制这些警告,支持多个(使用空格隔开)
用一杯咖啡支持我们,每一篇 [文档] 都经过我们实操,并非从网上一味的copy,期间花费了大量的心思,希望能够帮忙到您。
暂无评论

发送评论 编辑评论


|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇