Redis 慢查询
Posted 周杰伦本人
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis 慢查询相关的知识,希望对你有一定的参考价值。
@[TOC]
Redis 慢查询
配置与命令
Redis的慢速查询日志用于记录超过指定时间的命令。
slowlog-log-slower-than 10000
slowlog-max-len 128
Slowlog-log-slow-than表示超过了多少微秒。
Slowlog-max-len是一个先进先出的链表,可以保存多少慢日志。
slowlog get命令可以用来检查服务器保存的慢速查询日志。
slowlog len命令可以检查日志数量。
slowlog reset可以清除所有的慢速查询日志。
数据结构
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慢日志的分析,让我们来总结一下,慢查询日志针对出现查询比较慢的命令进行记录保存,保存是保存在一个链表中,先进先出,新的日志在链表的表头插入,通过slowlog get命令可以检查服务器保存的慢速查询日志,通过slowlog len命令可以检查日志数量,而slowlog reset清除所有的慢速查询日志,另外对于慢日志的定义,我们可以通过slowlog-log-slow-than参数和slowlog-max-len来表示。redis的慢查询的记录能够让我们在生产中迅速定位是哪条命令导致的redis服务的响应不及时,从而能很好的定位问题,解决问题。
redis除了慢查询还有其他的功能点让我们一起学习和进步,期待我的下一篇文章吧,今天的文章先写到这里,希望能给你带来收获。
以上是关于Redis 慢查询的主要内容,如果未能解决你的问题,请参考以下文章
Redis技术专区「优化案例」谈谈使用Redis慢查询日志以及Redis慢查询分析指南