Redis 缓冲区

缓冲区的应用场景 :

  • 客户端与服务器端的通信时,暂存客户端发送的命令数据,或暂存服务器端返给客户端的数据结果
  • 主从节点间进行数据同步时,暂存主节点接收的写命令和数据

客户端

缓冲区 : 避免客户端和服务器端的请求发送和处理速度不匹配

  • 服务器给每个连接的客户端都准备个输入缓冲区 , 输出缓冲区

image.png

输入缓冲区

输入缓冲区的溢出情况 :

  • 写入 bigkey,如 : 一次写入百万级别的集合数据
  • 服务器端处理请求的速度过慢,如 : Redis 主线程出现阻塞,导致输入缓冲区积累过多

查看输入缓冲区情况 :

  • cmd : 客户端最新执行的命令。如 : CLIENT
  • qbuf : 输入缓冲区已用的大小。如 : 已用 26 字节
  • qbuf-free : 输入缓冲区未用的大小。如 : 未用 32742 字节的缓冲区
  • qbufqbuf-free 的总和 : 该客户端分配的缓冲区总大小 (26 + 32742 = 32768 字节 = 32KB)
CLIENT LIST

id=5 addr=127.0.0.1:50487 fd=9 name= age=4 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=26 qbuf-free=32742 obl=0 oll=0 omem=0 events=r cmd=client

Redis 的每个客户端输入缓冲区大小的上限阈值固定 (1 GB)

  • 当多个客户端的占用内存总量 > Redis 的 maxmemory (如 : 4GB),就会触发 Redis 数据淘汰 , 进而导致性能低下

输出缓冲区

输出缓冲区有 2 个缓冲区 :

  • 固定缓冲空间 : 大小为 16KB,暂存 OK 响应和出错信息
  • 动态增加的缓冲空间 : 暂存大小可变的响应结果

输出缓冲区溢出情况 :

  • 返回 bigkey 的大量结果 : 会占用大量的内存空间
  • 执行 MONITOR : 会持续占用输出缓冲区
  • 缓冲区大小设置不合理

监测 Redis 每个命令 :

  • 建议用测试环境
MONITOR


OK
1600617456.437129 [0 127.0.0.1:50487] "COMMAND"
1600617477.289667 [0 127.0.0.1:50487] "info" "memory"

读写命令交互客户端的设置缓冲区大小 :

  • normal : 设置对象是普通客户端
  • 第 1 个 0 : 缓冲区大小限制
  • 第 2 个 0 : 缓冲区持续写入量限制
  • 第 3 个 0 : 持续写入时间限制
  • 0 : 不限制
client-output-buffer-limit normal 0 0 0

订阅客户端设置缓冲区大小 :

  • pubsub : 设置对象 : 订阅客户端
  • 8mb : 输出缓冲区上限 : 8MB,> 8MB,就关闭客户端的连接
  • 2mb 和 60 : 连续 60 秒内对输出缓冲区的写入量 > 2MB ,就关闭客户端连接
client-output-buffer-limit pubsub 8mb 2mb 60

主从缓冲区

主从集群间的数据复制有 2 种 :

  • 全量复制 : 同步所有数据
  • 增量复制 : 只收集主从库网络断连时的命令,同步给从库

复制缓冲区

主节点向从节点传输 RDB 时,会继续接收客户端的写请求

  • 把写命令先保存在复制缓冲区中,等 RDB 传输完成后,再发送给从节点执行

image.png

避免复制缓冲区发生溢出 :

  • 控制主节点的内存大小 , 建议 : 2~4 G
  • 设置合理复制缓冲区大小

复制缓冲区大小 :

  • slave : 对复制缓冲区
  • 512mb : 缓冲区大小的上限为 512MB
  • 128mb 和 60 : 连续 60 秒内的写入量 > 128MB 时,触发缓冲区溢出
  • 例子 : 一条写命令大小 : 1KB,复制缓冲区能累积 512K 条 (512MB/1KB = 512K)。写命令速率上限是 2000 条 /s(128MB/1KB/60 约等于 2000)
config set client-output-buffer-limit slave 512mb 128mb 60

复制积压缓冲区

主节点会把收到的写命令写入复制积压缓冲区 (repl_backlog_buffer)

  • 当从节点发生网络闪断,再与主节点连接后,从节点就从复制积压缓冲区中,读取断连开时的写命令,进行增量同步

image.png

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值