【Redis】《Redis 开发与运维》笔记-Chapter4-客户端

      最后更新:2022-04-28 09:20:38 手机定位技术交流文章

      四、客户端

      1、客户端通信协议

      • TCP协议是客户与服务机构之间通信协议的基础。
      • 重新创建了RESP(重新分层程序、重新分层程序),以建立简单、高效的客户服务接口,这些接口可由机器拆卸,仅由人类识别。

      以下是订单形式的一些例子:

      使用 nc 命令、 Telnet 指令甚至套接字程序来模拟 Redis 服务端提供的“ 真实” 结果。

      可以使用几种编程语言创建匹配的Redis客户端,使用RESSP的协议格式发送订单和返回结果。

      2. Java客户的绝地武士

      略…

      3. redispy是一个 Python 客户端。

      (1) 安装重发装置。

      Redis-py需要7种以上版本的Python2。

      重新安装有三种方法:

      (2) 基本重复使用。

      3) 利用再散射管。

      (4) Redis-py Lua的脚本。

      Redis-py为Lua脚本的执行提供三个关键功能:

      • Eval 函数有三个参数:
        1. 脚本:卢阿脚本的内容 。
        2. KeyCount: 键的总数 。
        3. KeyS和ARGV是两个相关的参数。
      • evalsha 函数用于执行脚本的 Hashi 值, 这需要三个参数 :
        1. 脚本Sha: 脚本 Hash Algorithm 1
        2. KeyCount: 键的总数 。
        3. KeyS和ARGV是两个相关的参数。

      4、客户端API

      (1) 客户端列表命令显示与 Redis 服务端的所有客户端连接。

      • 每个产出线从一个客户提供信息,可以观察到,客户有十多个属性,其中一些表明每个客户的执行状况:
        1. 识别身份: id,addr,fd,name, 这四个属性被用来识别客户 :
          1. id: 客户端连接的唯一标识符是 id, 该识别符与 Redis 连接自加, 当服务器重新启动时被重置为零 。
          2. Addr: 客户的 IP 地址和端口号 。
          3. 如果 fd=1 表示当前客户(不是外部客户,而是Redis内部的变相客户), fd:socket 文档描述符与 Issof 命令结果的 fd 相同。
          4. 姓名:客户姓名。
        2. 输入缓冲符:qbuf和qbuf-free。
          1. 每个客户都有雷迪斯指定的缓冲区。其结果是暂时储存客户提供的订单。同时,Redis从缓冲区检索和执行指令。输入缓冲器作为缓冲器,供客户向Redis发送订单,以便执行。cliet名单的qbuf和qbuf无值分别反映了缓冲区的总和剩余能力。
          2. 除了需要每个客户将缓冲区的面积限制在不超过1G,而后方客户将被关闭外,Redis没有给每个缓冲区的适当配置来界定其面积,而将根据输入大小的动态进行修改。
        3. obl, ol, omem是输出缓冲地带。
          1. 每个客户都有Redis分配给他们的产出缓冲。其职能是保存执行命令的结果,并将其归还客户。给 Redis 和客户互动回报的缓冲符 。与进入缓冲区的情况相反,关于如何使用缓冲区的资料很少。可以利用诸如cliet-out-out-put-buffer-litt等参数来配置缓冲区的输出能力。这不是离开缓冲区的唯一一条出路, 但它是离开缓冲区的唯一一条出路。客户分为三类:经常客户、订阅客户和奴隶客户。
          2. 固定缓冲区的长度以斜体表示,动态缓冲区清单的长度以圆形表示,而阿根廷代表使用字节。
        4. 客户端生存状态: 年龄和闲置时间分别描述当前客户连接的时间和上次闲置的时间。 当年龄与闲置时间吻合时, 总是可以连接 。
        5. 客户限制(最大客户和超时)
          1. Redis提供了最大分解选项,以限制客户连接的最大数量。如果连接数超过最大连接器数,新的连接将被拒绝。默认情况下,天线的最大数量设定为 10,00 。与当前 Redis 连接的次数可通过信息联系人看到。
          2. Redis 支持超时( 秒) 参数限制连接的最大自由时间 。当客户端连接的时间比超时更长时,连接将会被关闭。就实际发展和运输而言,它必须调整超时时间,使超时时间为零。例如,它可以设定为300秒。同时向客户端添加闲置测试和认证机制。
        6. 例如,国旗类型用于识别当前客户。 Flag=S 表示当前客户是奴隶客户,国旗=N 表示当前客户是正常客户,国旗=O 表示当前客户是执行监视命令。
        7. 其他参数
          1. db: 当前客户目前使用的数据库索引的说明。
          2. 子项/子项:当前客户注册的渠道或方式的数目。
          3. 倍数:在本交易中执行的指示数目
          4. 文体:文件说明(r/w):r和w可分别代表客户读和写。
      • 与不当使用输入缓冲装置有关的有两个问题:
        1. 如果客户进入缓冲区1G以上,客户将被关闭。
        2. 不允许进入不由最大模量管理的缓冲区。假设一个 Redis 示例将最大momomory设为 4G 。2G 数据已保存 。然而,如果目前使用3G来进入缓冲区,3G就可以使用。它已经超过最大内存限度。这可能导致数据丢失、关键淘汰、OMM和其他问题。
      • 缓冲区投入过多的主要原因是,Redis进入缓冲区后,处理速度不如处理速度快。他们到达缓冲区的顺序 由很多重金组成 每次他们这样做。因此,缓冲区投入过多。还有一个情况是,Redis受到阻碍。不久的将来我就不能处理订单了因此,输入缓冲区的客户订单积压。因此,缓冲区收到了过多的投入。
      • 跟踪缓冲区异常现象的发生有两种方法:
        1. cliet List 命令定期用于收集qbuf和qbuf-free数据,以便找到异常连接记录,分析和最终确定潜在的问题客户。
        2. 信息指令的信息缓冲模块用于寻找最大的输入缓冲区。 例如,可以设置 10-M 来报警 。
      • 与进入缓冲区的情况一样,最大程度不会限制缓冲区的出口,如果使用不当,将导致失去由最大程度、关键逐步淘汰、OMM等创造的数据。
      • 实际上,出口缓冲区由两部分组成:固定缓冲区(16 KB)和动态缓冲区,固定缓冲区的执行率相对较低,动态缓冲区的执行率相当大。
      • 当固定缓冲区满员时,新鲜的 Redis 返回结果将放在动态缓冲区的队列中,每个对象在队列中代表每次返回的结果。
      • 仍然有两种监测缓冲区出口的技术:
        1. 通过定期执行cliet List 命令来收集和分析一个奇特的连接记录。 这最终导致客户可能出现问题。
        2. 信息命令的信息文件夹模块返回输出缓冲区列表的最大项目数量 。
      • 出口缓冲区异常点的技术:
        1. 进行上述监测的方式是确定一个门槛值,及时处理这一门槛值。
        2. 设置 clit-out-put-buffer-lest 20mb 10mb 120 限制正常客户进入缓冲区的产出,以扼杀摇篮中的错误。
        3. 如果充分扩展奴隶输出缓冲,如果主节点的写得更加广泛,奴隶客户端的输出缓冲可能会更大,如果输出缓冲带的杀戮淹没了奴隶客户的连接,则可能导致重复。
        4. 例如,高级和高级监测令是有害的限制令,因为它们往往增加缓冲区的产出。
        5. 当缓冲区的输出被确定为极振动时,对记忆的及时监测可能过分。

      下表将监测缓冲区的利弊与客户名单和信息过滤器的利弊对比。

      命令 优点 缺点
      client list 它能够正确分析每个客户,以便发现问题。 执行缓慢(特别是在有多重联系的情况下),经常执行可能阻碍Redis。
      info clients 执行时间比干净清单的速度更快,分析方法也比较容易。 无法正确找到客户端; 无法向缓冲区显示全部输入的全部量, 只显示最大量

      客户端类型表

      序号 客户端类 说明
      1 N 普通客户端
      2 M 主节点是当前客户端 。
      3 S 目前,客户是奴隶节点。
      4 O 监视器命令目前正由当前客户端执行 。
      5 x 这项服务目前由目前的客户提供。
      6 b 目前的客户正在等待被封锁的时间。
      7 i 目前客户正在等待VM I/O,但情况已不再如此。
      8 d EXEC 命令将失败, 因为被监视的密钥已被更改 。
      9 u 客户端未被阻塞
      10 c 当输出完成时,断开连接 。
      11 A 尽可能快地关闭连接

      2)cliet 名称和 cliet get

      • 客户端集Name 函数用于生成客户名, 从而更容易确定客户的来历 。

      3)client kill

      • 客户端密钥命令用于终止提供 IP 地址和端口的客户端 。

      4)client pause

      • 客户端暂停命令用于禁用客户端的超时毫秒, 在此期间客户端的连接被禁用 。
      • 在下列情况下,该命令可能有利:
        1. 客户只对定期和发行的订阅客户使用,而不适用于主复制(从节点内伪装的客户),也就是说,目前主复制是正常的,指令可用于防止主复制不一致。
        2. Cliet Pause 可以控制地将客户端连接从一个 Redis 节点转换到另一个 。

      5)monitor

      • 监控员的命令被用来追踪Redis执行的命令。
      • 监测器可以监测所有订单,如果Redis的共同生产量太高,监测器客户的输出缓冲量就会上升,并可能迅速使用大量记录器来监测所有订单,如果Redis的共同生产量太高,监测器客户的输出缓冲量就会上升,并可能迅速消耗大量内存。

      5、客户端相关配置

      除了上述一些安排外,还有以下安排:

      • imout:检查客户端闲置连接的时间;如果闲置时间到达超时,客户关闭,没有测试;如果设定为0,没有进行测试;如果设定为0,没有进行测试,对客户端闲置连接的时间进行测试;如果闲置时间到达超时,客户关闭,没有运行测试;如果设定为0,没有进行测试。
      • 最大客户端: 客户端连接的最大数量。 此值由操作系统参数控制 。
      • tcp-keepalive: 检测 TCP 连接活动的周期; 默认值为 0, 表示连接没有保存 。 如果启用建议60, Redis 将每60 秒验证 TCP 连接, 以防止大量断层连接使用系统资源 。
      • TCP为回应 tcp -backlog 握手三次。所接受的连接将被添加到队列中 。以 tcp-backlog 显示队列大小 。Redis 的默认值为 511 。通常, 此参数不需要更改 。然而,操作系统将对这一参数产生影响。例如,在Linux操作系统中,如果 /proc/sys/net/core/somaxconn 的值小于 tcp-backlog 的值,然后,在Redis开始时,打印出的建议将是更大的/程序/sys/net/core/somaxcon。

      6、客户端统计片段

      • Conned_ clients: 代表当前 Redis 节点的客户端连接数量需要密切关注, 新的客户端连接如果超过最大端, 将被拒绝 。
      • cliet_ longest_output_list: 一次在所有输出缓冲区的最大排队项目数量 。
      • 主题_ biggest_ input_buf:当前所有输入缓冲的最大消耗容量 。
      • 屏蔽的客户:执行封锁命令的客户数量(例如blpop、brpop和brpolpush)。
      • 总计_公约_收到:Redis自成立以来处理的客户连接总量。
      • 拒绝的公约:Redis自成立以来拒绝的客户连接数量需要密切注意。

      7 绝地客户端错误

      (1) 无法从连接池获取连接
      2)客户端读写超时
      3)客户端连接超时
      (4) 客户端缓冲区内的异常现象
      5) Lua脚本目前正在实施。
      (6) 将耐久性文件装入 Redis
      7) Redis消耗的内存多于最大记忆环境。
      8) 客户联系非常巨大。

      7. 客户个案分析的结果是,Redis的记忆量大幅增加。

      1)现象

      • 寿命结束状态: 重置主节点, 记忆急剧增长, 几乎完全的顶部, 记忆从节点没有变化 。
      • 客户端发生:客户端造成 OOM 异常, 即 Redis 主节点的内存使用已超过最大缩写配置, 无法写入新数据 。

      2)分析原因

      (3) 治疗方式和确定后

      • 治疗:为了使其他客户恢复到正常的写作数据, 使用 cliet 杀死命令停止连接 。
      • 后期处理:
        1. 禁止监视器命令的依据是运输理念。例如,使用重命名命令将监视器命令更改为随机字符串,除此之外,如果监视器不执行重命名命令,您也可以以这种方式监测监视器命令(例如,薄片列表)。
        2. 开发一级的培训禁止在生产环境中使用监测令,因为监测令有时在测试期间更有益,绝对禁止则不那么现实。
        3. 限制输出缓冲区的大小。
        4. 使用Redis专用的Redis载运工具(例如Cachecloud),他们将收到相应的警告,帮助他们迅速查明和找到问题。

      分析客户案例 -- -- 客户周期性超时

      1)现象

      2)分析

      • 因此,网络观测:服务与客户之间的网络存在周期性困难,因此网络观测很常见。
      • Redis:对Redis日志进行了审查,没有发现任何不合规定之处。
      • 客户:由于周期性问题,查询记录缓慢的历史记录与时间相对应,发现只要调查缓慢,客户就会有大量耗时的连接,两个时间点几乎相同。

      (3) 治疗方式和确定后

      • 改变缓慢查询的理由:处理方法。
      • 后期处理:
        1. 业务一级的监测工作缓慢,超过门槛值时提供警报。
        2. 在发展层面,改善你对Redis的掌握,避免错误地使用Redis。
        3. 利用Redis公司的专业运输工具。

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/22942.html

          热门文章

          文章分类