# 如何查看Redis Key資源占用情況
## 前言
Redis作為高性能的鍵值數據庫,被廣泛應用于緩存、隊列等場景。隨著業務增長,Redis內存占用可能成為瓶頸。了解如何分析Key的資源占用情況,對性能優化和成本控制至關重要。本文將詳細介紹5種核心方法及實踐技巧。
---
## 一、基礎命令:MEMORY USAGE
### 1. 命令語法
```bash
MEMORY USAGE key [SAMPLES count]
key
:目標鍵名SAMPLES
:可選參數,對復雜數據類型采樣數量(默認5)127.0.0.1:6379> SET user:1001 "{...json數據...}"
OK
127.0.0.1:6379> MEMORY USAGE user:1001
(integer) 1872 # 返回字節數
/1024
轉換為KB# 1. 掃描匹配模式的key
127.0.0.1:6379> SCAN 0 MATCH user:* COUNT 100
# 2. 對返回的key逐個查詢內存
127.0.0.1:6379> MEMORY USAGE user:1001
#!/bin/bash
cursor=0
while true; do
reply=$(redis-cli SCAN $cursor MATCH "user:*" COUNT 100)
cursor=$(echo "$reply" | head -n1)
keys=$(echo "$reply" | tail -n +2)
for key in $keys; do
size=$(redis-cli MEMORY USAGE $key)
echo "$key,$size" >> memory_report.csv
done
if [[ $cursor -eq 0 ]]; then break; fi
done
將結果導入Excel生成: - 內存占用TOP10柱狀圖 - 按前綴分類的餅圖
pip install rdbtools python-lzf
# 分析RDB文件
rdb -c memory dump.rdb --bytes 1024 --type string -f memory.csv
# 常用參數說明:
# --bytes 最小顯示大小
# --type 過濾數據類型
# --key 正則匹配鍵名
database,type,key,size_in_bytes,encoding,num_elements,len_largest_element
0,string,user:1001,1872,string,0,0
0,hash,product:2002,524288,hashtable,342,128
127.0.0.1:6379> MONITOR
redis-cli MONITOR | awk -F '"' '/GET|SET/{print $2}' | sort | uniq -c | sort -nr
場景 | 錯誤用法 | 優化方案 | 節省效果 |
---|---|---|---|
計數器 | String | INCR+HASH | 60-70% |
標簽系統 | SET存儲 | 壓縮位圖 | 90%+ |
# 啟用內存淘汰
maxmemory 16gb
maxmemory-policy allkeys-lru
# 啟用壓縮
list-compress-depth 1
hash-max-ziplist-entries 512
A: 對于壓縮存儲的數據結構,Redis返回的是序列化后的大小,可能小于內存實際占用。
redis-cli --bigkeys -i 0.1 # 間隔采樣避免阻塞
通過本文介紹的5種方法組合使用,可以建立完整的Redis內存監控體系。建議: 1. 日常使用SCAN+MEMORY定期掃描 2. 每周通過rdb-tools生成全量報告 3. 針對大Key實施拆分/壓縮
附錄: - Redis內存優化官方指南 - 推薦可視化工具:RedisInsight、Grafana Redis Dashboard “`
注:本文實際約1250字,可根據需要增減案例細節或配置參數說明以達到精確字數要求。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。