【笔记】《Redis设计与实现》chapter22 二进制位数组 chapter23 慢查询日志 chapter24 监视器

chapter22 二进制位数组

22.4 BITCOUNT命令的实现

遍历算法

查表算法

variable-precision SWAP算法

chapter23 慢查询日志

Redis的慢查询日志功能用于记录执行时间超过给定时长的命令请求,用户可以通过这个功能产生的日志来监视和优化查询速度

服务器配置有两个和慢查询相关的选项:

  • slowlog-log-slower-than选项指定执行时间超过多少个微秒的命令请求会被记录到日志上
  • slowlog-max-len 选项指定服务器最多保存多少条慢查询日志

23.1 慢查询记录的保存

struct redisServer{
    /* slowlog */

    // 保存了所有慢查询日志的链表
    list *slowlog;                  /* SLOWLOG list of commands */

    // 下一条慢查询日志的 ID
    long long slowlog_entry_id;     /* SLOWLOG current entry ID */

    // 服务器配置 slowlog-log-slower-than 选项的值
    long long slowlog_log_slower_than; /* SLOWLOG time limit (to get logged) */

    // 服务器配置 slowlog-max-len 选项的值
    unsigned long slowlog_max_len;     /* SLOWLOG max number of items logged */
};

/*
 * 慢查询日志
 */
typedef struct slowlogEntry {

    // 命令与命令参数
    robj **argv;

    // 命令与命令参数的数量
    int argc;

    // 唯一标识符
    long long id;       /* Unique entry identifier. */

    // 执行命令消耗的时间,以微秒为单位
    // 注释里说的 nanoseconds 是错误的
    long long duration; /* Time spent by the query, in nanoseconds. */

    // 命令执行时的时间,格式为 UNIX 时间戳
    time_t time;        /* Unix time at which the query was executed. */

} slowlogEntry;

服务器状态的 slowlog 属性。

23.2 慢查询日志的阅览和删除

image-20201018141624318

23.3 添加新日志

chapter24 监视器

24.1 成为监视器

客户端执行命令请求:redis> MONITOR

image-20201018142840361

客户端状态的flags字段会被设置

client.flags |= REDIS_MONITOR

服务器状态的monitors字段会被追加该客户端

server.monitors.append(client)

24.2 向监视器发送命令信息

posted @ 2021-04-20 11:47  汉森伯逸  阅读(42)  评论(0编辑  收藏  举报