如何排除 Redis 中的问题

介绍

Redis是一个开源的内存关键值数据存储器,它配备了几个命令,可以帮助解决问题和调试问题。由于Redis的性质是内存关键值存储器(https://en.wikipedia.org/wiki/In-memory_database),许多命令专注于内存管理,但还有其他命令对您的Redis服务器的状态有价值。本教程将详细介绍如何使用这些命令来帮助诊断和解决您在使用Redis时可能遇到的问题。

如何使用此指南

这个指南是写成一个骗局的表,包含自含的示例,我们鼓励你跳到任何与你试图完成的任务相关的部分。

在本指南中显示的命令在运行 Redis 版本 6.0.1 版本的 Ubuntu 22.04 服务器上进行了测试。 要设置类似的环境,您可以遵循我们指南中的 Step 1How To Install and Secure Redis on Ubuntu 22.04 上进行测试。 我们将通过使用 Redis 命令行接口的 redis-cli 来演示这些命令的行为。 如果您使用不同的 Redis 接口 - 例如 - 某些命令的准确输出可能会有所不同。

或者,您可以提供一个受管理的 Redis 数据库实例来测试这些命令,但取决于数据库提供商允许的控制水平,本指南中的一些命令可能无法按描述的方式工作。 要提供 DigitalOcean 受管理数据库,请遵循我们的 管理数据库产品文档

解决记忆相关问题

「記憶體使用量」告訴你一個鍵目前使用多少記憶體. 它將一個鍵的名稱作為一個論點,並輸出它使用的字節數量。

1set key_meaningOfLife "Food"

接下来,检查记忆使用的内存:

1memory usage key_meaningOfLife
1[secondary_label Output]
2(integer) 88

要了解您的 Redis 服务器如何使用内存,您可以运行内存统计命令:

1memory stats

此命令输出了一系列与记忆相关的指标及其值,以下是由记忆统计报告的指标:

  • 峰值分配 ' : Redis *total.aldication'所消耗的字节数的峰值: Redis *启动. 分配' 分配的字节总数 : Redis在启动时所消耗的字节的初始数 *replex.backlog': 复制积压的大小, 以字节表示
  • 客户. slaves' : 所有复制品的总大小_overheads_,指输出和查询缓冲器及连接上下文 *客户端. 正常': 所有客户管理费用的总规模 *aof.buffer': 当前并重写[附录-仅存文件] (https://en.wikipedia.org/wiki/Redis#Persistence) 缓冲器的总大小 *db.0':服务器上使用的每个数据库的主词名和过期词典的间接费用,以字节 *`间接费用'来报告。 用于管理 Redis 密钥空间的所有间接费用的总和
  • 钥匙.计数': 存储在服务器上的所有数据库中的密钥总数 *密钥. 字节每键 : 服务器的净内存使用率和 keys. counts
  • dataset.bytes 的比例: 数据集大小,以字节为单位
  • 数据集dataset. bytes 取得的 Redis 净内存使用百分比 *高峰 ' 百分比: 最高分配的百分比 从总.分配 ' 中取出 *`分解': 目前使用的内存量除以物理内存Redis的比例实际上是使用

‘memory malloc-stats’ 提供来自 Redis 在 Linux 系统上使用的内存分配器 jemalloc的内部统计报告:

1memory malloc-stats

如果您似乎正在处理与记忆相关的问题,但对上一个命令的输出进行解析是无用的,您可以尝试运行记忆医生:

1memory doctor

此功能将输出它可以找到的任何内存消耗问题,并建议潜在的解决方案。

获取有关您的 Redis 实例的通用信息

与内存管理无直接关系的调试命令是监视器,该命令允许您查看由 Redis 服务器处理的每个命令的恒定流:

1monitor
1[secondary_label Output]
2OK
31566157213.896437 [0 127.0.0.1:47740] "auth" "foobared"
41566157215.870306 [0 127.0.0.1:47740] "set" "key_1" "878"

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

1info
1[secondary_label Output]
2# Server
3redis_version:6.0.16
4redis_git_sha1:00000000
5redis_git_dirty:0
6redis_build_id:a3fdef44459b3ad6
7redis_mode:standalone
8os:Linux 5.15.0-41-generic x86_64
9. . .

此命令返回大量信息. 如果您只想返回一个信息块,则可以将其指定为info的参数:

1info CPU
1[secondary_label Output]
2# CPU
3used_cpu_sys:173.16
4used_cpu_user:70.89
5used_cpu_sys_children:0.01
6used_cpu_user_children:0.04

请注意,通过info命令返回的信息将取决于您正在使用的 Redis 版本。

使用钥匙命令

在您忘记密钥的名称,或者您创建了一个密钥,但意外误写了它的名称的情况下,密钥命令有助于搜索符合模式的密钥:

1keys pattern

支持以下 glob-style 变量:

  • ?是代表任何单个字符的野卡,所以 s?mmy匹配 sammy, sommysqmmy
  • *是代表任何字符的野卡,包括没有字符,所以 s?y匹配 sammy, say, sammmmy,和 salmony
  • 您可以指定两个或多个字符,该模式可以包括通过将它们包装在子中,所以 s[ai]mmy将匹配 sammysimmy,但不是 summy
  • 为了设置一个野卡,不考虑一个或多个字母,将它们包装在子里,然后用一根胡萝卜(^`),

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

结论

本指南详细介绍了一些用于故障排除和解决问题可能遇到的问题的命令,如果有其他相关的命令,论点或程序,你想了解这个指南,请在评论中询问或提出建议。

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

Published At
Categories with 技术
comments powered by Disqus