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