如何解決Redis中的問題

介紹

Redis是一個開源的、內存中的鍵值數據存儲庫。它帶有幾個命令,可以幫助解決故障排除和調試問題。由於Redis作為內存中的鍵值存儲庫,許多這些命令都聚焦於內存管理,但也有其他一些對於提供Redis服務器狀態概述很有價值的命令。本教程將詳細介紹如何使用這些命令來幫助診斷和解決您在使用Redis時遇到的問題。

如何使用本指南

本指南被編寫為一份包含自給自足示例的速查表。我們鼓勵您跳到任何與您正在完成的任務相關的部分。

本指南中顯示的命令已在運行Redis版本6.0.16的Ubuntu 22.04服務器上進行了測試。要設置類似的環境,您可以遵循我們關於如何在Ubuntu 22.04上安裝和保護Redis的指南的第1步。我們將演示這些命令的行為,方法是使用redis-cli,這是Redis命令行界面。如果您使用不同的Redis界面,例如Redli,某些命令的確切輸出可能會有所不同。

Alternatively, 你可以提供一個受管理的 Redis 資料庫實例來測試這些指令,但根據你的資料庫供應商所允許的控制程度,此指南中的某些指令可能無法正確運作。若要提供 DigitalOcean 受管理的資料庫,請參照我們的Managed Databases 產品文件。然後,你必須安裝 Redli設置 TLS 隧道以便透過 TLS 連接到受管理的資料庫。

memory usage 顯示目前由單一金鑰使用的記憶體量。它以金鑰的名稱作為參數並輸出它使用的位元組數。首先,設定一個範例變數:

  1. set key_meaningOfLife "Food"

接下來,使用memory usage檢查記憶體:

  1. memory usage key_meaningOfLife
Output
(integer) 88

為了更全面了解你的 Redis 伺服器如何使用記憶體,你可以執行memory stats指令:

  1. 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:Redis 淨內存使用量中 dataset.bytes佔的百分比
  • peak.percentagepeak.allocatedtotal.allocated的百分比
  • fragmentation:當前使用的內存量除以Redis實際使用的物理內存的比例

memory malloc-stats 提供了一個來自jemalloc的內部統計報告,這是Linux系統上Redis使用的內存分配器:

  1. memory malloc-stats

如果您遇到內存相關問題,但解析前面命令的輸出對您沒有幫助,可以嘗試運行memory doctor

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

  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塊,可以將其指定為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版本:

使用keys命令

keys 命令在你忘記鍵名稱的情況下很有用,或者你可能已經創建了一個鍵但意外地拼錯了它的名稱。keys 搜尋與模式匹配的鍵:

  1. keys pattern

支援以下 glob 樣式變數:

  • ? 是代表任何單個字符的通配符,因此 s?mmy 匹配 sammysommysqmmy
  • * 是代表任意數量字符(包括零個字符)的通配符,因此 sa*y 匹配 sammysaysammmmmmysalmony
  • 你可以通過將它們放在方括號中來指定模式可以包含的兩個或更多字符,所以 s[ai]mmy 將匹配 sammysimmy,但不匹配 summy
  • 要設置一個忽略一個或多個字母的通配符,將它們放在方括號中並在前面加上一個插入符號(^),所以 s[^oi]mmy 將匹配 sammysxmmy,但不匹配 sommysimmy
  • 要設置包含一系列字母的通配符,用連字號分隔範圍的開始和結束,然後將其放在方括號中,所以 s[a-o]mmy 將匹配 sammyskmmysommy,但不匹配 srmmy

警告: Redis 文檔 警告說幾乎永遠不應該在生產環境中使用 keys,因為它可能對性能產生重大負面影響。

結論

本指南詳細介紹了一些對於解決Redis工作中可能遇到的問題非常有幫助的命令。如果您在本指南中想了解其他相關的命令、參數或程序,請在評論中提出或提出建議。

有關Redis命令的更多信息,請查看我們的教程系列,了解如何管理Redis數據庫

Source:
https://www.digitalocean.com/community/cheatsheets/how-to-troubleshoot-issues-in-redis