1.首先cp一份dump.rdb到另外的目錄(通常redis的持久化以rdb的方式存儲,在redis配置文件能夠找到dump.rdb的存儲路徑)php
2.用rdbtools工具生產內存報告,命令是 rdb -c memory,例子:linux
sudo rdb -c memory /vagrant/dump.rdb >test.csv
(rdb文件越大,生成時間就長久)redis
3.報告生成後,結合用linux sort命令排序,根據內存列排序,找出最高的key有哪些。例子:工具
sudo sort -k4nr -t , test.csv > sort.txt
4.查看sort.txt的結果,通常能得出相似‘my_ranking_list’開頭的集合佔用最高,排在了前面。若要查看相似‘my_ranking_list’開頭的總共佔用了多少內存,能夠用命令:優化
sudo cat sort.txt | grep ‘my_ranking_list’ | awk -F ',' '{sum += $4};END {print sum}'
5.咱們得知了my_ranking_list這樣的集合佔用最多內存,並且極可能是業務已經再也不須要,可是長期在內存中沒清理的,咱們能夠刪除了這些集合,能夠用模糊匹配key來刪除,命令以下:spa
redis-cli -h 127.0.0.1 -p 6379 keys 'my_ranking_list*' | xargs redis-cli -h 127.0.0.1 -p 6379 del
6.暫時清理了一下無用和佔用大的key後,redis寫功能暫時恢復,可是還需對其進行優化和整理,例如按期清理一些無用的數據等vagrant
PS:在這裏分享一個和redis無關的小功能,就是php的錯誤級別日誌功能。通常咱們在生產環境,設置的錯誤級別都是error_reporting(0)。可是這樣很不方便咱們去查問題,因此咱們能夠用如下這個來記錄正常的報錯在日誌中,並且不展現在用戶的頁面:日誌
error_reporting(E_ALL & ~E_NOTICE); ini_set('display_errors','0'); ini_set('log_errors','1'); ini_set('error_log', dirname(__DIR__).'/log/php_errors/'.date('Ymd').'.log');
這樣有利於快速知道問題產生的錯誤報告,還有沒事的時候能夠看看日誌有哪些地方是能夠優化的code