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慢查询分析指南

RedisRedis慢查询

Redis慢查询,redis-cli,redis-benchmark,info

浅谈Redis之慢查询日志

Redis 慢查询与弱事务

Redis 慢查询与弱事务