电子书 当前页面的脚本发生错误 Redis性能问题排查解决手册(值得收藏)

11/28 05:13:01 来源网站:辅助卡盟网

命令处理数total_commands_processed

在info信息里的total_commands_processed字段显示了Redis服务处理命令的总数,其命令都是从一个或多个Redis客户端请求过来的。Redis每时每刻都在处理从客户端请求过来的命令,它可以是Redis提供的140种命令的任意一个。

total_commands_processed字段的值是递增的,比如Redis服务分别处理了client_x请求过来的2个命令和client_y请求过来的3个命令,那么命令处理总数(total_commands_processed)就会加上5。

电子书 当前页面的脚本发生错误_当前脚本发生错误 51_dnf当前脚本发生错误

分析命令处理总数,诊断响应延迟。

在Redis实例中,跟踪命令处理总数是解决响应延迟问题最关键的部分,因为Redis是个单线程模型,客户端过来的命令是按照顺序执行的。比较常见的延迟是带宽,通过千兆网卡的延迟大约有200μs。倘若明显看到命令的响应时间变慢,延迟高于200μs,那可能是Redis命令队列里等待处理的命令数量比较多。

如上所述,延迟时间增加导致响应时间变慢可能是由于一个或多个慢命令引起的,这时可以看到每秒命令处理数在明显下降,甚至于后面的命令完全被阻塞,导致Redis性能降低。要分析解决这个性能问题,需要跟踪命令处理数的数量和延迟时间。

比如可以写个脚本,定期记录total_commands_processed的值。当客户端明显发现响应时间过慢时,可以通过记录的total_commands_processed历史数据值来判断命理处理总数是上升趋势还是下降趋势电子书 当前页面的脚本发生错误,以便排查问题。

使用命令处理总数解决延迟时间增加。

通过与记录的历史数据比较得知,命令处理总数确实是处于上升或下降状态,那么可能是有2个原因引起的:

下面有三个办法可以解决,因上面2条原因引起的响应延迟问题。

「1. 使用多参数命令:」

若是客户端在很短的时间内发送大量的命令过来,会发现响应时间明显变慢,这由于后面命令一直在等待队列中前面大量命令执行完毕。有个方法可以改善延迟问题,就是通过单命令多参数的形式取代多命令单参数的形式。

举例来说,循环使用LSET命令去添加1000个元素到list结构中,是性能比较差的一种方式,更好的做法是在客户端创建一个1000元素的列表,用单个命令LPUSH或RPUSH,通过多参数构造形式一次性把1000个元素发送的Redis服务上。下面的表格是Redis的一些操作命令,有单个参数命令和支持多个参数的命令,通过这些命令可尽量减少使用多命令的次数。

「2. 管道命令:」

另一个减少多命令的方法是使用管道(pipeline),把几个命令合并一起执行,从而减少因网络开销引起的延迟问题。因为10个命令单独发送到服务端会引起10次网络延迟开销,使用管道会一次性把执行结果返回,仅需要一次网络延迟开销。Redis本身支持管道命令,大多数客户端也支持,倘若当前实例延迟很明显,那么使用管道去降低延迟是非常有效的。

「3. 避免操作大集合的慢命令:」

如果命令处理频率过低导致延迟时间增加,这可能是因为使用了高时间复杂度的命令操作导致,这意味着每个命令从集合中获取数据的时间增大。

所以减少使用高时间复杂的命令,能显著的提高的Redis的性能。下面的表格是高时间复杂度命令的列表,其详细描述了命令的属性,有这助于高效合理的、最优化的使用这些命令(如果不得不使用的话),以提高Redis性能。

延迟时间

Redis的延迟数据是无法从info信息中获取的。倘若想要查看延迟时间,可以用 Redis-cli工具加--latency参数运行,如:

    暂无相关资讯
电子书 当前页面的脚本发生错误 Redis性能问题排查解决手册(值得收藏)