介紹
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
顯示目前由單一金鑰使用的記憶體量。它以金鑰的名稱作為參數並輸出它使用的位元組數。首先,設定一個範例變數:
- 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
:Redis 淨內存使用量中dataset.bytes
佔的百分比peak.percentage
:peak.allocated
占total.allocated
的百分比fragmentation
:當前使用的內存量除以Redis實際使用的物理內存的比例
memory malloc-stats
提供了一個來自jemalloc的內部統計報告,這是Linux系統上Redis使用的內存分配器:
- 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