万隆的笔记 万隆的笔记
博文索引
笔试面试
  • 在线学站

    • 菜鸟教程 (opens new window)
    • 入门教程 (opens new window)
    • Coursera (opens new window)
  • 在线文档

    • w3school (opens new window)
    • Bootstrap (opens new window)
    • Vue (opens new window)
    • 阿里开发者藏经阁 (opens new window)
  • 在线工具

    • tool 工具集 (opens new window)
    • bejson 工具集 (opens new window)
    • 文档转换 (opens new window)
  • 更多在线资源
  • Changlog
  • Aboutme
GitHub (opens new window)
博文索引
笔试面试
  • 在线学站

    • 菜鸟教程 (opens new window)
    • 入门教程 (opens new window)
    • Coursera (opens new window)
  • 在线文档

    • w3school (opens new window)
    • Bootstrap (opens new window)
    • Vue (opens new window)
    • 阿里开发者藏经阁 (opens new window)
  • 在线工具

    • tool 工具集 (opens new window)
    • bejson 工具集 (opens new window)
    • 文档转换 (opens new window)
  • 更多在线资源
  • Changlog
  • Aboutme
GitHub (opens new window)
  • Redis

    • Redis简介
    • 缓存的认识
    • Linux安装Redis的正确方式
    • Redis数据类型
    • Redis底层数据结构
    • Redis回收策略与缓存过期
    • Redis持久化
    • Redis发布与订阅
    • Redis事务
    • Redis Lua脚本
    • Redis 慢查询
      • 慢查询配置
      • 查询慢日志
      • 慢查询定位&处理
      • 慢查询记录的保存
    • Redis 监视器
    • Redis通讯协议
    • Redis事件处理机制与NIO演进
    • Redis 常用命令
    • Redis与MyBatis整合
    • Spring、SpringBoot整合Redis
  • 集群架构

  • Redis
  • Redis
2022-03-30
目录

Redis 慢查询

# Redis 慢查询

同MySQL一样,Redis也有慢查询日志的功能。

# 慢查询配置

在redis.conf中可以配置和慢查询日志相关的选项:

#执行时间超过多少 微秒 的命令请求会被记录到日志上 0 :全记录 <0 不记录 
slowlog-log-slower-than 10000 
#slowlog-max-len 存储慢查询日志条数 
slowlog-max-len 128

此外,也可以通过config set进行临时设置:

config set slowlog-log-slower-than 微秒
config set slowlog-max-len 条数

# 查询慢日志

通过指令slowlog get [n]查看:

127.0.0.1:6379> config set slowlog-log-slower-than 1 # 查看一条
OK
127.0.0.1:6379> set k2 testSlow
OK
127.0.0.1:6379> slowlog get 1
1) 1) (integer) 3          # 日志的唯一标识符(uid)
   2) (integer) 1648643481 # 命令执行时间戳
   3) (integer) 3          # 命令执行的时长(微秒)
   4) 1) "set"             # 命令详情
      2) "k2"
      3) "testSlow"
   5) "127.0.0.1:52470"
   6) ""

# 慢查询定位&处理

使用slowlog get 可以获得执行较慢的redis命令,针对该命令查询出来的结果进行优化,优化建议:

  • 尽量使用短的key,对于value有些也可精简,能使用int就int。
  • 避免使用keys *、hgetall等全量操作。
  • 减少大key的存取,打散为小key
  • 有可能是RDB在持久化过程导致Redis性能下降,这个时候考虑关闭持久化或者使用AOF持久化。
  • 想要一次添加多条数据的时候可以使用管道
  • 尽可能地使用哈希存储
  • 尽量限制Redis使用的内存大小,这样可以避免redis使用swap分区或者出现OOM错误内存与硬盘的swap

# 慢查询记录的保存

Redis使用列表存储慢查询日志,采用队列方式(FIFO)。

在redisServer中保存和慢查询日志相关的信息:

struct redisServer { 
  // ... 
  // 下一条慢查询日志的 ID
  long long slowlog_entry_id; 
  // 保存了所有慢查询日志的链表 
  FIFO list *slowlog; 
  // 服务器配置 slowlog-log-slower-than 选项的值 
  long long slowlog_log_slower_than; 
  // 服务器配置 slowlog-max-len 选项的值 
  unsigned long slowlog_max_len;
  // ... 
};

slowlog 链表保存了服务器中的所有慢查询日志, 链表中的每个节点都保存了一个 slowlogEntry 结构, 每个 slowlogEntry 结构代表一条慢查询日志:

typedef struct slowlogEntry { 
  // 唯一标识符 
  long long id; // 命令执行时的时间,格式为 UNIX 时间戳 
  time_t time; // 执行命令消耗的时间,以微秒为单位 
  long long duration; // 命令与命令参数 
  robj **argv; // 命令与命令参数的数量 
  int argc; 
} slowlogEntry;
上次更新: 5/30/2023, 11:42:20 PM
Redis 监视器

Redis 监视器→

最近更新
01
2025
01-15
02
Elasticsearch面试题
07-17
03
Elasticsearch进阶
07-16
更多文章>
Theme by Vdoing
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式