引言

Redis 是一个开源的、内存中的键值数据存储。 它附带几个命令,可以帮助进行故障排除和调试问题。 由于 Redis 的本质是内存中的键值存储,因此其中许多命令侧重于内存管理,但是还有一些命令对于提供 Redis 服务器状态的概述非常有价值。 本教程将详细介绍如何使用这些命令来帮助诊断和解决在使用 Redis 时可能遇到的问题。

如何使用本指南

本指南是作为包含自包含示例的备忘单编写的。 我们鼓励您跳转到任何与您正在尝试完成的任务相关的部分。

本指南中显示的命令是在运行 Redis 4.0.9版本的 Ubuntu 18.04服务器上测试的。 要建立一个类似的环境,你可以按照我们关于如何在 Ubuntu 18.04上安装和保护 Redis 的指南的第一步。 我们将通过使用 Redis-cli (Redis 命令行界面)运行这些命令来演示它们的行为。 请注意,如果您使用的是不同的 Redis 接口ーー例如 Redli ーー某些命令的确切输出可能会有所不同。

或者,您可以提供一个托管 Redis 数据库实例来测试这些命令,但是请注意,根据您的数据库提供程序所允许的控制级别,本指南中的某些命令可能不能像描述的那样工作。 要提供一个数字数据库管理数据库,请遵循我们的管理数据库产品文档。 然后,必须安装 Redli 或设置 TLS 通道,以便通过 TLS 连接到托管数据库。

解决与内存相关的问题

内存使用情况告诉您单个密钥当前使用了多少内存。 它以一个键的名称作为参数并输出它使用的字节数:

  • memory usage key_meaningOfLife
Output
(integer) 42

为了更全面地了解 Redis 服务器是如何使用内存的,可以运行 memory stats 命令:

  • memory stats

此命令输出一组与内存相关的指标及其值。 以下是内存统计报告的指标:

  • Allocated: Redis 使用的字节峰值
  • 分配的字节总数: Redis 分配的字节总数
  • Startup.alted: Redis 在启动时消耗的初始字节数
  • Backlog: 复制 backlog 的大小,以字节为单位
  • Slaves: 所有复制开销的总大小(输出、查询缓冲区和连接上下文)
  • 所有客户间接费用的总和
  • Buffer: 当前和重写仅追加文件缓冲区的总大小
  • 分贝。 0: 服务器上使用的每个数据库的主字典和过期字典的开销,以字节为单位报告
  • Total: 用于管理 Redis 的密钥空间的所有开销的总和
  • Keys.count: 存储在服务器上的所有数据库中的密钥总数
  • Keys.bytes-per-key: 服务器的净内存使用量与 keys.count 的比值
  • Bytes: 数据集的大小,以字节为单位
  • 百分比: 由 dataset.bytes 占用的 Redis 净内存使用量的百分比
  • Percentage: 从 total.alted 中获得的 peak.allocated 的百分比
  • 碎片: 当前使用的内存量除以 Redis 实际使用的物理内存量的比率

Memory malloc-stats 提供了来自 jemalloc 的内部统计报告,这是 Redis 在 Linux 系统上使用的内存分配器:

  • memory malloc-stats

如果您似乎遇到了与内存相关的问题,但是解析前面命令的输出被证明是无用的,那么您可以尝试运行内存博士:

  • memory doctor

这个特性将输出它能够找到的任何内存消耗问题,并提出潜在的解决方案。

获取 Redis 实例的一般信息

与内存管理没有直接关系的调试命令是监视器。 这个命令可以让你看到 Redis 服务器处理的每个命令的一个常量流:

  • monitor
Output
OK 1566157213.896437 [0 127.0.0.1:47740] "auth" "foobared" 1566157215.870306 [0 127.0.0.1:47740] "set" "key_1" "878"

另一个对调试有用的命令是 info,它返回关于服务器的几个信息块和统计数据:

  • info
Output
# Server redis_version:4.0.9 redis_git_sha1:00000000 redis_git_dirty:0 redis_build_id:9435c3c2879311f3 redis_mode:standalone os:Linux 4.15.0-52-generic x86_64 . . .

这个命令返回很多信息。 如果你只想看到一个信息块,你可以把它指定为 info 的参数:

  • info CPU
Output
# CPU used_cpu_sys:173.16 used_cpu_user:70.89 used_cpu_sys_children:0.01 used_cpu_user_children:0.04

请注意,info 命令返回的信息将取决于您使用的是哪个版本的 Redis。

使用键命令

如果您忘记了某个密钥的名称,或者您创建了一个密钥,但是不小心拼错了它的名称,那么 keys 命令会很有帮助。 钥匙会找出符合模式的钥匙:

  • keys pattern

支持下面的 glob 样式变量

  • ? 是一个通配符代表任何单个字符,所以 s? mmy 匹配 sammy,sommy,和 sqmmy
  • * 是一个通配符,代表任意数量的字符,包括没有任何字符,因此 sa * y 匹配 sammy,比如,sammmmy 和 salmony
  • 您可以通过将它们包装在括号中来指定模式可以包含的两个或多个字符,所以 s [ ai ] mmy 将匹配 sammy 和 simmy,但不匹配 summy
  • 若要设置一个无视一个或多个字母的通配符,请将它们包装在括号中,并在前面加上一个 carrot (^) ,所以 s [ ^ oi ] mmy 将匹配 sammy 和 sxmmy,但不匹配 sommy 或 simmy
  • 要设置一个包含一系列字母的通配符,可以用连字符分隔该范围的开始和结束,并将其包装在括号中,因此[ a-o ] mmy 将匹配 sammy、 skmmy 和 sommy,但不匹配 srmmy

警告: Redis 文档警告说,几乎不应该在生产环境中使用键,因为它可能会对性能产生重大的负面影响。

总结

本指南详细介绍了许多有助于故障排除和解决在使用 Redis 时可能遇到的问题的命令。 如果还有其他相关的命令、参数或者程序你想在本指南中看到,请在下面的评论中询问或者提出建议。

有关 Redis 命令的更多信息,请参见我们关于如何管理 Redis 数据库的系列教程。