如何在Redis中解决问题

引言

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

如何使用本指南

这个指南是一个详细说明了自成一体例子的备忘清单。我们鼓励您直接跳到与您当前任务相关的任何部分。

这个指南中展示的命令已在运行Redis版本6.0.16的Ubuntu 22.04服务器上进行了测试。要设置一个类似的环境,您可以按照我们关于在Ubuntu 22.04上安装和保护Redis的指南的第一步进行操作。我们将使用Redis命令行界面redis-cli来运行这些命令,以演示它们的行为。如果您使用不同的Redis界面,例如Redli,某些命令的确切输出可能会有所不同。

或者,您可以提供一个托管的Redis数据库实例来测试这些命令,但根据您的数据库提供商允许的控制级别,本指南中的某些命令可能无法按照描述的方式正常工作。要提供Silicon Cloud托管的数据库,请遵循我们的托管数据库产品文档。然后,您必须安装Redli或设置一个TLS隧道才能通过TLS连接到托管的数据库。

解决与内存相关的问题

内存使用情况告诉你当前单个键正在使用的内存量。它以一个键的名称作为参数,并输出其所使用的字节数。首先,设置一个示例变量。

  1. set key_meaningOfLife “Food”

 

接下来,使用内存使用情况检查内存。

  1. memory usage key_meaningOfLife

 

Output

(integer) 88

要更全面地了解Redis服务器如何使用内存,您可以运行内存统计命令。

  1. memory stats

 

这个命令会输出一系列与内存相关的指标及其值。下面是内存统计报告的指标。

  • peak.allocated: The peak number of bytes consumed by Redis
  • total.allocated: The total number of bytes allocated by Redis
  • startup.allocated: The initial number of bytes consumed by Redis at startup
  • replication.backlog: The size of the replication backlog, in bytes
  • clients.slaves: The total size of all replica overheads, meaning the output and query buffers and connection contexts
  • clients.normal: The total size of all client overheads
  • aof.buffer: The total size of the current and rewrite append-only file buffers
  • db.0: The overheads of the main and expiry dictionaries for each database in use on the server, reported in bytes
  • overhead.total: The sum of all overheads used to manage Redis’s keyspace
  • keys.count: The total number of keys stored in all the databases on the server
  • keys.bytes-per-key: The ratio of the server’s net memory usage and keys.count
  • dataset.bytes: The size of the dataset, in bytes
  • dataset.percentage: The percentage of Redis’s net memory usage taken by dataset.bytes
  • peak.percentage: The percentage of peak.allocated taken out of total.allocated
  • fragmentation: The ratio of the amount of memory currently in use divided by the physical memory Redis is actually using

memory malloc-stats 是 Redis 在 Linux 系统上使用的内存分配器 jemalloc 提供的内部统计报告。

  1. memory malloc-stats

 

如果你似乎遇到了与内存相关的问题,但解析前几个命令的输出并没有帮助的话,你可以尝试运行内存修复工具。

  1. memory doctor

 

该功能将输出它能够发现的任何内存消耗问题,并提出潜在解决方案。

获取有关您的 Redis 实例的常规信息

一个与内存管理没有直接关联的调试命令是monitor。此命令允许您查看Redis服务器处理的每个命令的连续流。

  1. 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,它返回有关服务器的多个信息和统计数据块。

  1. 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。

  1. 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版本。

使用Command键

在你忘记了一个键的名字,或者你创建了一个键但不小心拼写错误的情况下,keys命令非常有帮助。keys会寻找与给定模式相匹配的键。

  1. keys pattern

 

支持以下的字符匹配变量:

  • ? is a wildcard standing for any single character, so s?mmy matches sammy, sommy, and sqmmy
  • * is a wildcard that stands for any number of characters, including no characters at all, so sa*y matches sammy, say, sammmmmmy, and salmony
  • You can specify two or more characters that the pattern can include by wrapping them in brackets, so s[ai]mmy will match sammy and simmy, but not summy
  • To set a wildcard that disregards one or more letters, wrap them in brackets and precede them with a carrot (^), so s[^oi]mmy will match sammy and sxmmy, but not sommy or simmy
  • To set a wildcard that includes a range of letters, separate the beginning and end of the range with a hyphen and wrap it in brackets, so s[a-o]mmy will match sammy, skmmy, and sommy, but not srmmy

Warning

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

结论

这份指南详细介绍了一些对于解决Redis工作中可能遇到的问题非常有帮助的命令。如果在这份指南中你还想学习其他相关的命令、参数或者操作步骤,请在评论区提问或者提出建议。

欲了解更多关于 Redis 命令的信息,请查阅我们的教程系列《如何管理 Redis 数据库》。

发表回复 0

Your email address will not be published. Required fields are marked *


广告
将在 10 秒后关闭
bannerAds