dot Redis 8 发布了——它是开源的

了解更多

增强 Redis 慢查询日志

Redis 慢查询日志是调试和追踪 Redis 数据库的最佳工具之一,尤其是在您遇到 Redis 操作高延迟和高 CPU 使用率的情况下。此在线讨论 在 Redis DB 群组中的讨论只是众多示例之一,展示了 Redis 慢查询日志的效率。由于 Redis 基于单线程架构,因此 Redis 慢查询日志比 MySQL 慢查询日志等多线程数据库系统的慢查询机制有用得多。

与包含软件锁定开销(这使得调试过程非常复杂)的工具不同,Redis 慢查询日志在显示每个慢速命令的实际处理时间方面非常有效。作为 Redis Cloud 的提供商,我们大量使用 Redis 慢查询日志进行内部监控,并帮助我们的用户解决与其复杂查询相关的延迟问题。我们经常发现自己很难理解慢查询日志中显示的同一 Redis 命令的两次执行时间之间的差异——通常是对于像 ZUNIONSTOREZINTERSTOREZRANGEBYSCORE 这样的复杂命令。基于我们的经验,我们认为 Redis 社区可以从为慢查询日志中存储的每个命令添加时间复杂度参数中受益。通过这项增强功能,我们希望用户能更好地理解他们的 Redis 数据库操作,包括同一命令执行时间之间的差异和 CPU 使用率的峰值。闲话少说,以下是我们为增强 Redis 慢查询日志贡献的内容(加粗部分):

33) 1) (integer) 468359

 

2) (integer) 1358158701

3) (integer) 132912

4) 复杂度信息: N:48362,M:38687

5)1) “ZUNIONSTORE”

2) “AAA”

3) “5”

4) “BBB”

5) “CCC”

6) “DDD”

7) “EEE”

8) “FFF”

9) “WEIGHTS”

10) “1”

11) “1”

12) “1”

13) “1”

14) “1”

15) “AGGREGATE”

16) “MIN”

34) 1) (integer) 61701

2) (integer) 1354754379

3) (integer) 15217

4) 复杂度信息: N:886,M:885

5)    1) “ZREVRANGE”

2) “XYZ”

3) ”1”

4) ”1000”

5) “WITHSCORES”

35) 1) (integer) 61700

2) (integer) 1354754379

3) (integer) 16067

4) 复杂度信息: N:897,K:2,M:897

5)    1) “ZINTERSTORE”

2) “XYZ”

3) ”2”

4) ”YZX”

5) “ZXY”

 

为了更好地理解复杂度,您可以使用下表:

命令相关值复杂度
LINSERTN – 列表长度O(N)
LREMN – 列表长度O(N)
LTRIMN – 移除的元素数量O(N)
PUBLISHN – 频道订阅者数量 M – 模式订阅数量O(N+M)
PSUBSCRIBEN – 客户端订阅的模式数量 argc – 传递给命令的参数数量O(argc*N)
PUNSUBSCRIBEN – 客户端订阅的模式数量 M – 订阅模式总数 argc – 传递给命令的参数数量O(argc*(N+M))
SDIFFN – 所有集合中的元素总数O(N)
SDIFFSTOREN – 所有集合中的元素总数O(N)
SINTERN – 最小集合中的元素数量 argc – 传递给命令的参数数量O(argc*N)
SINTERSTOREN – 最小集合中的元素数量 argc – 传递给命令的参数数量O(argc*N)
SMEMBERSN – 集合中的元素数量O(N)
SORTN – 列表/集合/有序集合中的元素数量 M – 结果中的元素数量O(N+M*log(M)) 当不排序时 O(N)
SUNIONN – 所有集合中的元素总数O(N)
SUNIONSTOREN – 所有集合中的元素总数O(N)
UNSUBSCRIBEN – 订阅所有频道的客户端总数O(N)
ZADDN – 有序集合中的元素数量O(log(N))
ZCOUNTN – 有序集合中的元素数量 M – min 和 max 之间的元素数量O(log(N)+M)
ZINCRBYN – 有序集合中的元素数量O(log(N))
ZINTERSTOREN – 最小有序集合中的元素数量 K – 有序集合数量 M – 结果集合中的元素数量O(N*K)+O(M*log(M))
ZRANGEN – 有序集合中的元素数量 M – 结果数量O(log(N)+M)
ZRANGEBYSCOREN – 有序集合中的元素数量 M – 结果数量O(log(N)+M)
ZRANKN – 有序集合中的元素数量O(log(N))
ZREMN – 有序集合中的元素数量 argc – 传递给命令的参数数量O(argc*log(N))
ZREMRANGEBYRANKN – 有序集合中的元素数量 M – 移除的元素数量O(log(N)+M)
ZREMRANGEBYSCOREN – 有序集合中的元素数量 M – 移除的元素数量O(log(N)+M)
ZREVRANGEN – 有序集合中的元素数量 M – 结果数量O(log(N)+M)
ZREVRANKN – 有序集合中的元素数量O(log(N))
ZUNIONSTOREN – 所有有序集合的元素总数 M – 结果中的元素数量O(N)+O(M*log(M))

对此感兴趣的读者,这项增强是我们的扩展版 Redis 2.6 的一部分,可以在我们的 GitHub 账户中此处找到。