華爲雲學院帶你7天入門Redis(2)

華爲雲學院帶你7天入門Redis(2)

1、深度剖析memory
Info是Redis提供的一個非常有用的查看狀態信息的命令。使用 redis-cli 連上 Redis,輸入 info all 命令,redis-server 就 會返回 Redis 的狀態信息,詳細內容如下:
圖片描述

其中 memory、stats、clients、keyspace 是 Redis 運行時經常要關注的信息,接下來我們重點對這四項進行解讀。
對於 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: 主要用來反應集羣特性
圖片描述
以上內容出自於華爲雲學院(edu.huaweicloud.com),想要繼續學習,歡迎登陸雲學院,站內搜索“redis”即可獲得免費視頻課程。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章