介绍
Redis是一个开源的、内存中的键值对数据存储。它配备了多个命令,可以帮助进行故障排除和调试。由于Redis作为一个内存中的键值对存储,许多这些命令侧重于内存管理,但也有其他一些对于提供Redis服务器状态概述非常有价值的命令。本教程将详细介绍如何使用其中一些命令来帮助诊断和解决在使用Redis时可能遇到的问题。
如何使用本指南
本指南被编写为一个包含自包含示例的速查表。我们鼓励您跳转到与您要完成的任务相关的任何部分。
本指南中显示的命令在运行Redis版本6.0.16的Ubuntu 22.04服务器上进行了测试。要设置类似的环境,您可以按照我们在Ubuntu 22.04上安装和保护Redis的指南的第1步进行操作。我们将通过使用redis-cli
,即Redis命令行界面来演示这些命令的行为。如果您使用不同的Redis接口 —— 例如Redli,某些命令的确切输出可能会有所不同。
或者,您可以提供一个托管的Redis数据库实例来测试这些命令,但根据您的数据库提供商允许的控制级别,此指南中的某些命令可能无法按照描述的那样工作。要提供DigitalOcean托管的数据库,请参阅我们的托管数据库产品文档。然后,您必须要么安装Redli,要么设置TLS隧道以便通过TLS连接到托管的数据库。
解决与内存相关的问题
memory usage
告诉您一个键当前使用多少内存。它以键的名称作为参数并输出它使用的字节数。首先,设置一个示例变量:
- set key_meaningOfLife "Food"
接下来,使用memory usage
检查内存:
- memory usage key_meaningOfLife
Output(integer) 88
为了更全面地了解Redis服务器如何使用内存,您可以运行memory stats
命令:
- memory stats
此命令输出一系列与内存相关的指标及其值。以下是由memory stats
报告的指标:
peak.allocated
:Redis消耗的字节的峰值total.allocated
:Redis分配的字节的总数startup.allocated
:启动时Redis消耗的初始字节数replication.backlog
:复制回放的大小,以字节为单位clients.slaves
:所有副本开销的总大小,即输出和查询缓冲区以及连接上下文开销的总大小clients.normal
:所有客户端开销的总大小aof.buffer
:当前和重写追加模式文件缓冲区的总大小db.0
:服务器上每个正在使用的数据库的主要和过期字典的开销,以字节报告overhead.total
:用于管理Redis键空间的所有开销的总和keys.count
:服务器上所有数据库中存储的键的总数keys.bytes-per-key
:服务器的净内存使用率和keys.count
的比率dataset.bytes
:数据集的大小,以字节为单位dataset.percentage
:由dataset.bytes
占据的Redis净内存使用率的百分比peak.percentage
:占total.allocated
的peak.allocated
的百分比fragmentation
:当前内存使用量与Redis实际使用的物理内存之比
memory malloc-stats
提供了来自jemalloc的内部统计报告,这是Redis在Linux系统上使用的内存分配器:
- memory malloc-stats
如果似乎遇到了与内存有关的问题,但解析前面命令的输出没有帮助,您可以尝试运行memory doctor
:
- memory doctor
此功能将输出它能够找到的任何内存消耗问题并建议潜在解决方案。
获取有关Redis实例的常规信息
A debugging command that isn’t directly related to memory management is monitor
. This command allows you to review a constant stream of every command processed by the Redis server:
- monitor
OutputOK
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:6.0.16
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:a3fdef44459b3ad6
redis_mode:standalone
os:Linux 5.15.0-41-generic x86_64
. . .
此命令返回大量信息。如果您只想返回一个info块,可以将其指定为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
命令在以下情况下非常有用:当您忘记了密钥的名称,或者可能创建了一个密钥但是不小心拼错了它的名称时。keys
会搜索与模式匹配的密钥:
- keys pattern
支持以下glob风格的变量:
?
是一个通配符,代表任何单个字符,因此s?mmy
匹配sammy
、sommy
和sqmmy
*
是一个通配符,代表任意数量的字符,包括零个字符,因此sa*y
匹配sammy
、say
、sammmmmmy
和salmony
- 您可以通过将它们用括号括起来来指定模式可以包含的两个或更多字符,所以
s[ai]mmy
将匹配sammy
和simmy
,但不匹配summy
- 要设置一个忽略一个或多个字母的通配符,将它们用括号括起来,并在前面加上一个脱字符(
^
),所以s[^oi]mmy
将匹配sammy
和sxmmy
,但不匹配sommy
或simmy
- 要设置一个包含字母范围的通配符,用连字符分隔范围的起始和结束,然后将其用括号括起来,所以
s[a-o]mmy
将匹配sammy
、skmmy
和sommy
,但不匹配srmmy
警告:Redis文档警告说几乎永远不应在生产环境中使用keys
,因为它可能会严重影响性能。
结论
本指南详细介绍了一些对于排除故障和解决在使用Redis过程中可能遇到的问题非常有帮助的命令。如果您在本指南中想了解其他相关的命令、参数或程序,请在评论中提问或提出建议。
有关Redis命令的更多信息,请查看我们的教程系列:如何管理Redis数据库。
Source:
https://www.digitalocean.com/community/cheatsheets/how-to-troubleshoot-issues-in-redis