(Redis基礎教程之十二) 如何解決Redis中的故障

wangsys發表於2021-09-09

介紹

是一個開源的記憶體中鍵值資料儲存。它帶有幾個命令,可以幫助您進行故障排除和除錯。由於Redis具有的性質,因此其中許多命令都集中在記憶體管理上,但是還有一些其他命令對於概述Redis伺服器的狀態很有用。本教程將提供有關如何使用其中一些命令來幫助診斷和解決使用Redis時可能遇到的問題的詳細資訊。

如何使用本指南

本指南以備有完整示例的備忘單形式編寫。我們鼓勵您跳至與您要完成的任務相關的任何部分。

本指南中顯示的命令已在執行Redis版本4.0.9的Ubuntu 18.04伺服器上進行了測試。要設定類似的環境,您可以按照我們的指南步驟1進行操作。我們將透過使用Redis命令列介面執行它們來演示這些命令的行為。請注意,如果您使用其他Redis介面(例如,則某些命令的確切輸出可能會有所不同。

另外,您可以提供一個託管的Redis資料庫例項來測試這些命令,但是請注意,根據資料庫提供者所允許的控制級別,本指南中的某些命令可能無法按所述方式工作。要配置DigitalOcean託管資料庫,請遵循我們的。然後,您必須 才能透過TLS連線到託管資料庫。

對記憶體相關問題進行故障排除

memory usage告訴您單個鍵當前正在使用多少記憶體。它以鍵的名稱作為引數,並輸出其使用的位元組數:

memory usage key_meaningOfLife


(integer) 42

為了更全面地瞭解您的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佔用的Redis淨記憶體使用量的百分比 dataset.bytes
  • peak.percentagepeak.allocated取出的百分比total.allocated
  • fragmentation:當前正在使用的記憶體量除以Redis實際使用的實體記憶體之比

memory malloc-stats提供了來自的內部統計報告,該報告是Linux系統上Redis使用的記憶體分配器:

memory malloc-stats

如果您似乎遇到了與記憶體有關的問題,但是解析前面命令的輸出證明是無濟於事的,則可以嘗試執行memory doctor

memory doctor

此功能將輸出它可以找到的所有記憶體消耗問題,並提出潛在的解決方案。

獲取有關Redis例項的常規資訊

與記憶體管理沒有直接關係的除錯命令是monitor。此命令使您可以檢視Redis伺服器處理的每個命令的恆定流:

monitor


OK
1566157213.896437 [0 127.0.0.1:47740] "auth" "foobared"
1566157215.870306 [0 127.0.0.1:47740] "set" "key_1" "878"

另一個對除錯有用的命令是info,它返回有關伺服器的多個資訊和統計資訊塊:

info


# Server
redis_version:4.0.9
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:9435c3c2879311f3
redis_mode:standalone
os:Linux 4.15.0-52-generic x86_64
. . .

此命令返回很多資訊。如果您只想檢視一個資訊塊,則可以將其指定為info

info CPU


# 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的比賽sammysommysqmmy
  • *是一個萬用字元,用來代表任何數量的字元,包括沒有任何字元,所以sa*y比賽sammysaysammmmmmy,和salmony
  • 您可以透過將模式將其括在方括號中來指定模式可以包含的兩個或多個字元,以s[ai]mmy匹配sammysimmy,但不能匹配summy
  • 要設定一個忽略一個或多個字母的萬用字元,請將其括在方括號中,並在其前面加上一個胡蘿蔔(^),這樣s[^oi]mmy可以匹配sammysxmmy,但不能匹配sommysimmy
  • 要設定一個萬用字元,其中包括一系列的字母,範圍的開頭和結尾分開連字元和括號包起來,這樣s[a-o]mmy將匹配sammyskmmysommy,但不srmmy

**警告:**本警告說,keys應該幾乎從來沒有在生產環境中使用,因為它可能會對效能產生重大的負面影響。

結論

本指南詳細介紹了許多命令,這些命令可用於故障排除和解決與Redis一起使用時可能遇到的問題。如果您想在本指南中概述其他相關的命令,引數或過程,請在下面的評論中提出疑問或提出建議。

有關Redis命令的更多資訊,請參閱關於系列教程。


  1. 作者:
    出處:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/3244/viewspace-2825490/,如需轉載,請註明出處,否則將追究法律責任。

相關文章