Redis 慢查询

志不强者智不达,言不信者行不果。这篇文章主要讲述Redis 慢查询相关的知识,希望能为你提供帮助。
@[TOC]
Redis 慢查询 配置与命令
Redis的慢速查询日志用于记录超过指定时间的命令。

slowlog-log-slower-than 10000 slowlog-max-len 128

Slowlog-log-slow-than表示超过了多少微秒。
Slowlog-max-len是一个先进先出的链表,可以保存多少慢日志。
slowlogget命令可以用来检查服务器保存的慢速查询日志。
slowloglen命令可以检查日志数量。
slowlogreset可以清除所有的慢速查询日志。
数据结构
redisServer的slowlog链表保存了服务器中所有的慢查询日志,链表的节点是slowlogEntry结构。
/* This structure defines an entry inside the slow log list */ typedef struct slowlogEntry robj **argv; int argc; long long id; /* Unique entry identifier. */ long long duration; /* Time spent by the query, in nanoseconds. */ time_t time; /* Unix time at which the query was executed. */ slowlogEntry;

采用头插法插入新的日志,新的日志在表头,旧的在表尾
如何添加慢速日志:
/* Push a new entry into the slow log. * This function will make sure to trim the slow log accordingly to the * configured max length. */ void slowlogPushEntryIfNeeded(robj **argv, int argc, long long duration) if (server.slowlog_log_slower_than < 0) return; /* Slowlog disabled */ if (duration > = server.slowlog_log_slower_than) listAddNodeHead(server.slowlog,slowlogCreateEntry(argv,argc,duration)); /* Remove old entries if needed. */ while (listLength(server.slowlog) > server.slowlog_max_len) listDelNode(server.slowlog,listLast(server.slowlog));

总结
这篇文章是对redis慢日志的分析,让我们来总结一下,慢查询日志针对出现查询比较慢的命令进行记录保存,保存是保存在一个链表中,先进先出,新的日志在链表的表头插入,通过slowlogget命令可以检查服务器保存的慢速查询日志,通过slowloglen命令可以检查日志数量,而slowlogreset清除所有的慢速查询日志,另外对于慢日志的定义,我们可以通过slowlog-log-slow-than参数和slowlog-max-len来表示。redis的慢查询的记录能够让我们在生产中迅速定位是哪条命令导致的redis服务的响应不及时,从而能很好的定位问题,解决问题。
【Redis 慢查询】redis除了慢查询还有其他的功能点让我们一起学习和进步,期待我的下一篇文章吧,今天的文章先写到这里,希望能给你带来收获。

    推荐阅读