Redis 使用指南:深度解析 info 命令

Redis 是一個使用  ANSI C 編寫的開源、基於內存、可選持久性的鍵值對存儲數據庫,被普遍應用於大型電商網站、視頻網站和遊戲應用等場景,可以有效減小數據庫磁盤 IO, 提升數據查詢效率,減輕管理維護工做量,下降數據庫存儲成本。對傳統磁盤數據庫是一個重  要的補充,成爲了互聯網應用,尤爲是支持高併發訪問的互聯網應用必不可少的基礎服務之一。它的主要優點有如下幾方面:html

  •   首先性能極高,正由於是內存型數據庫,讀寫操做全在內存進行,所以 Redis 讀寫的速度能到 10 萬 ops。
  •   Redis 相對於其它內存數據庫,還提供豐富的數據接口:如字符串(strings),  散列

(hashes),  列表(lists),  集合(sets),  有序集合(sorted sets)  等,設置包括 bitmaps,hyperloglogs 和 地理空間(geo)操做查詢。這也許是大多數開發者相對於其它內存數據庫選擇 Redis 一個重要緣由。redis

  •   雖然是內存型數據庫,但它也提供持久化功能。

Redis 目前在 DB-Engines Ranking(https://db-engines.com/en/ranking)排名第 7,幾乎全部的公有云平臺都提供了 Redis 服務。雖然 Redis 性能高,但咱們平時在使用 Redis 的過程當中,也應該關注其運行時的狀態,根據這些信息,咱們一方面能夠優化使用 Redis 的方法,另外一方面當應用程序出現超時、響應極慢的狀況時,能夠進行分析。數據庫

到這裏,就必需要說到 Redis 提供的一個很是有用的查看狀態信息的命令:info,使用 redis-cli 連上 redis,輸入 info all 命令,redis-server 就會返回 Redis 的狀態信息,詳細內容以下:緩存

 

參數名服務器

說明網絡

server架構

獲取 server 信息,包括 version, OS, port 等信息併發

clients運維

獲取 clients 信息,如客戶端鏈接數等分佈式

memory

獲取 server 的內存信息,包括當前內存消耗、內存使用峯值

persistence

獲取 server 的持久化配置信息

stats

獲取 server 的一些基本統計信息,如處理過的鏈接數量等

replication

獲取 server 的主從配置信息

cpu

獲取 server 的 CPU 使用信息

keyspace

 

獲取 server 中各個 DB 的 key 的數量

 

 

cluster

獲取集羣節點信息,僅在開啓集羣后可見

commandstas

獲取每種命令的統計信息

 

 

其中 memory,stats,clients,keyspace 是 Redis 運行時常常要關注的信息,能

夠有效幫咱們本文重點對這四欄中咱們須要詳細瞭解的信息。

1、深度剖析 Redis 最重要的 memory

對於 Redis 來講,內存是最重要的資源,因此本文首先介紹 Redis 內存狀態信息怎麼查看, 也就是 memory 這一欄:

  •   used_memory:Redis 分配器分配的內存量,也就是實際存儲數據的內存總量。
  •   used_memory_human:以可讀格式顯示 used_memory。
  •   used_memory_rss:以操做系統的角度,顯示 Redis 進程佔用的總物理內存。
  •   used_memory_rss_human:以可讀格式顯示 used_memory_rss
  •   mem_fragmentation_ratio:used_memory_rss /used_memory 比值,表示內存碎片率。其中 used_memory 反映了當前 Redis 存儲數據的內存使用狀況,當內存使用率達到

Redis 設置的 maxmemory 時,Redis 就會根據設置內存數據逐出策略,以不一樣的方式移除存儲在內存中的數據。好比,若是設置的策略爲 noeviction,那麼 Redis 會直接返回錯誤提示。

mem_fragmentation_ratio 表示的內存碎片率,理解這一指標,對優化 Redis 實例的資源性能是很是重要的。內存碎片率稍大於 1 是比較合理的範圍,此時內存碎片率還比較低,同時也說明  Redis 沒有發生  swap。但若是內存碎片率的值超過了  1.5,那就說明

Redis 消耗了實際須要物理內存的  150%,其中有  50%是內存碎片率,能夠直接斷定爲

Redis 內存碎片過大。內存碎片率是否是越低就越好呢?答案是否認的。當內存碎片率低於 1 時,說明 Redis 內存分配超出了物理內存,操做系統正在進行 swap,Redis 可能會把部分數據交換到硬盤上。swap 會嚴重影響 Redis 的性能,形成極大的延遲。

 

2、stats 幫你全面理解 Redis 狀態

stats 能夠統計 Redis 的基礎信息,好比 Redis 的鏈接數、命令、網絡、同步狀態等很是重要的信息。下面介紹如下幾個比較重要的信息:

  •   total_connections_received:鏈接過的客戶端總數。
  •   total_commands_processed:處理過的命令總數。
  •   instantaneous_ops_per_sec:每秒處理的命令數。
  •   keyspace_hits:keyspace 命中次數。

 

  •   keyspace_misses:keyspace 未命中次數。
  •   rejected_connections:因爲 maxclients 限制而拒絕的鏈接數量。
  •   expired_keys:key 過時事件的總數。
  •   evicted_keys:因爲 maxmemory 限制,而被回收內存的 key 的總數。

total_connections_received 和 total_commands_processed 反映了 Redis 服務器自從啓動以來,全部處理過的鏈接數和命令數。instantaneous_ops_per_sec 反應了 Redis 服務器的忙碌狀態。當 rejected_connections 的值不爲 0 時,說明應用的鏈接數過多, 或者 maxclients 配置的過小。

對於應用來講,  keyspace_hits 和  keyspace_misses 這兩項指標是很是關鍵的。

Redis 對其全部的命令都設置了專門的標識屬性,如「只讀」,「寫」或者「管理命令」之類,在 Redis 源碼中,查看一下 redisCommand 結構體中 sflags 成員屬性字段,就能夠知道這個命令是具備哪些屬性。好比,w 表示一個寫命令(如  set,del 命令),r 表示是一個只讀命令( get , hmget 命令), a 則表示一個管理命令(config,shutdown) 。其中

keyspace_hits 和 keyspace_misses 都是針對具有隻讀屬性的 Redis 操做命令作統計,若是 info 統計出來的 keyspace_misses 值太高,或者在過去一段時間內增加很快,那麼就說明這一段時間從  Redis 中獲取數據都沒有拿到,這時也許就須要檢查一下應用數據在

Redis 中的存放和訪問狀況了。若是 key 在明確的時間週期內被使用,或者舊的 key 未來可能不會被使用,就能夠用 Redis 過時時間命令(expire,expireat, pexpire, pexpireat 等)去設置過時時間,這樣  Redis 就會在  key 過時時自動刪除  key,這個信息能夠經過

expired_keys 去查看。當內存使用達到設置的最大閥值 maxmemory 時,Redis 則會根據設置的 key 逐出策略,淘汰 Redis 中存儲的數據,這個信息能夠根據 evicted_keys 查看。

 

3、解讀 Redis 鏈接數的意義

clients 包含了鏈接數,輸入輸出緩衝和阻塞命令鏈接數等狀況。

  •   connected_clients:客戶端鏈接的數量。
  •   client_longest_output_list:當前的客戶端鏈接之中最長的輸出列表。
  •   client_biggest_input_buf:當前的客戶端鏈接之中最大的輸入緩衝區。
  •   blocked_clients:因爲阻塞調用(BLPOP、BRPOP、BRPOPLPUSH)而等待的客戶端的數量。

鏈接數其實對於 Redis 來講能夠看作是一種有限資源,通常 Redis 都配置有最大鏈接

 

數 限 制 , 因 此 了 解 這 個 對 於 確 保 應 用 正 常 連 接 也 是 相 當 重 要 的 。 

client_longest_output_list 太高則極可能說明如今 Redis 出現了異常,可能要結合clients list 來排查客戶端鏈接狀況。使用了阻塞命令時,blocked_clients 也須要重點關注。

 

4、Keyspace 幫你瞭解數據狀態

Keyspace 主要提供關於每一個 Redis 數據庫的主字典的統計數據。這些統計數據包括鍵的數量、具備過時時間的 key 的數量和平均生存時間。對於每一個數據庫來講,

keyspace 欄顯示的每行信息格式以下所示: dbX: keys=X,expires=X,avg_ttl=X

其中,第一個 X 表示數據庫的編號,第二個 X 表示鍵的數量,第三個 X 表示具備過時時間的鍵的數量,第四個 X 表示鍵的平均生存時間。舉個例子:

db0:keys=6,expires=0,avg_ttl=0:這就表示當前數據庫 0 的 key 總數有 6 個,帶有過時時間的 key 總數 0 個,平均存活時間爲 0。

 

Redis Info 命令的其它信息,在這裏也簡要介紹一下:如 server 欄,是會顯示關於 Redis 服務器自身的一些信息, 如版本號, 操做系統, 端口等。Persistence 和

replication 則與數據庫持久化和主備複製有關,cpu 反映了 Redis 服務器 CPU 使用信息,

commandstas 是顯示  Redis 全部命令執行的詳細信息,包括命令調用次數、命令消耗的

CPU 時間總量、每次執行命令消耗 CPU 時間的平均值。Cluster 主要用來反應集羣特性。關於更多 Redis 的使用指南,能夠到華爲雲 Redis 官網上了解,也能夠試用免費的

Redis    ,    來    體    驗    一    下    內    存    數    據    庫    的    使    用    感    受    :

http://www.huaweicloud.com/product/dcs.html。分佈式緩存服務  DCS 是華爲雲上的

Redis 內存數據庫服務,基於雙機熱備的高可用架構,擁有豐富的緩存類型,可以很好地知足用戶高讀寫性能及快速數據訪問的業務訴求。分佈式緩存服務可以有效加快應用的處  理速度,提高熱點數據訪問速度,大幅下降數據庫讀寫頻率,下降業務對總體架構的壓力, 具備高可靠、在線擴展、一鍵運維等特色。

相關文章
相關標籤/搜索