溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何在redis中使用 key分析占用內存量

發布時間:2020-11-25 14:54:22 來源:億速云 閱讀:1603 作者:Leah 欄目:開發技術

這篇文章將為大家詳細講解有關如何在redis中使用 key分析占用內存量,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

Redis的指令看不出哪一類型的key,占用了多少內存,不好分析redis內存開銷大的情況下,各應用程序使用緩存的占比。

借助第3方工具進行分析

1、采用2個工具結合

redis-rdb-tools+sqlite

2、sqlite linux服務器都會自帶,安裝redis-rdb-tools

使用pip安裝 pip install redis-rdb-tools

源碼安裝

git clone https://github.com/sripathikrishnan/redis-rdb-tools

cd redis-rdb-tools

python setup.py install

如果不成功安裝 yum install python-setuptools

3、獲取對應redis的rdb文件,使用redis-rdb-tools生成內存快照

rdb -c memory dump.rdb > memory.csv

注意:內存使用量是理論上的近似值,在一般情況下,略低于實際值

4、把數據導入sqlite(mysql數據庫實際上都能導入),sqlite語法和mysql基本一致

splite3 test.db
sqlite> create table memory(database int,type varchar(128),key varchar(128),size_in_bytes int,encoding varchar(128),num_elements int,len_largest_element varchar(128),time varchar(128));
sqlite>.mode csv memory
sqlite>.import memory.csv memory

5、查詢

查詢key個數

sqlite>select count(*) from memory;

查詢總的內存占用

sqlite> select sum(size_in_bytes) from memory;

查詢內存占用最高的10個key

sqlite>select * from memory order by size_in_bytes desc limit 10;

補充知識:Redis使用量暴增,快速定位有哪些大key在作怪

發現redis使用量突然暴增,于是緊急擴容redis,不能影響服務運行。擴容之后,趕緊查找原因,突破口就是尋找存在哪些大key。

1. 將redis的dump.rdb文件下載到本地(一般redis的持久化文件以rdb的方式存儲,在redis配置文件可以找到dump.rdb的存儲路徑)。

2. 用rdbtools工具生產內存報告,命令是 rdb -c memory,例子:

sudo rdb -c memory /redisfile/dump.rdb >test.csv

注意:rdb文件越大,生成時間越長。

Rdbtools是以python語言開發的。

GITHUP地址:https://github.com/sripathikrishnan/redis-rdb-tools/

3. 內存報告生成后,結合用linux sort命令排序,根據內存列排序,找出最高的key有哪些。例子:

sudo sort -k4nr -t , test.csv > sort.txt

4. 查看前1000個排序最高的數據

awk -F ',' '{print substr($3, 0,18)}' sort.txt | head -1000 | sort -k1 | uniq

5. 查看sort.txt的結果,一般能得出類似‘my_rank_top'開頭的集合占用最高,排在了前面。

若要查看類似‘my_rank_top'開頭的key總共占用了多少內存,可以用命令:

sudo cat sort.txt | grep ‘my_rank_top' | awk -F ',' '{sum += $4};END {print sum}'

6. 得知了my_rank_top這樣的key占用最多內存,而且很可能是業務已經不再需要,但是長期在內存中沒清理的,我們可以刪除了這些集合??梢杂媚:ヅ鋕ey來刪除,命令如下:

redis-cli -h 127.0.0.1 -p 6379 keys 'my_ranking_list*' | xargs redis-cli -h 127.0.0.1 -p 6379 del

另附:在本地啟動redis加載dump.rdb文件時,一直load失敗。搞了很長時間,終于找到原因:redis配置文件里databases要修改為256,本地默認是16,而產生原始dump.rdb的redis的databases就是25。

關于如何在redis中使用 key分析占用內存量就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女