日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

redis-rdb-tools来解析分析reids dump文件及内存使用量

發(fā)布時(shí)間:2025/3/8 编程问答 64 豆豆
生活随笔 收集整理的這篇文章主要介紹了 redis-rdb-tools来解析分析reids dump文件及内存使用量 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>

?redis-rdb-tools來解析分析reids dump文件及內(nèi)存使用量?

?

.?前言

解析redis的dump.rdb文件,分析內(nèi)存,以JSON格式導(dǎo)出數(shù)據(jù)。|
提供的功能有:
1. 生成內(nèi)存報(bào)告
2. 轉(zhuǎn)儲文件到JSON
3. 使用標(biāo)準(zhǔn)的diff工具比較兩個(gè)dump文件

Rdbtools是以python語言開發(fā)的。

.?安裝

2.1 前提條件
1. python2.4以上版本 和 pip
2. redis-py可選,只運(yùn)行在測試用例下

2.2 從PyPI安裝(推薦)

# /usr/local/python/bin/easy_install pip

# /usr/local/python/bin/pip install rdbtools

2.3 從源碼包安裝

?

# wget?https://github.com/sripathikrishnan/redis-rdb-tools/archive/master.zip

# unzip master

# cd redis-rdb-tools-master/

# python setup.py install

Downloading/unpacking rdbtools

??Downloading rdbtools-0.1.5.tar.gz

??Running setup.py egg_info for package rdbtools

?

????warning: no files found matching 'README.textile'

Installing collected packages: rdbtools

??Running setup.py install for rdbtools

?

????warning: no files found matching 'README.textile'

????Installing redis-memory-for-key script to /usr/local/python/bin

????Installing redis-profiler script to /usr/local/python/bin

????Installing rdb script to /usr/local/python/bin

Successfully installed rdbtools

Cleaning up...

.?轉(zhuǎn)換dump文件到JSON

?

# /usr/local/python/bin/rdb --help

Usage: rdb [options] /path/to/dump.rdb

Example : rdb --command json -k "user.*" /var/redis/6379/dump.rdb

?

Options:

??-h, --help??????????? show this help message and exit

??-c FILE, --command=FILE

????????????????????????要執(zhí)行的命令json?或?diff

??-f FILE, --file=FILE??輸出文件名

??-n DBS, --db=DBS??????數(shù)據(jù)庫ID。可以提供多個(gè)數(shù)據(jù)庫。如果沒有指定,包含所有數(shù)據(jù)庫。

??-k KEYS, --key=KEYS???導(dǎo)出鍵。可以是正則表達(dá)式。

??-t TYPES, --type=TYPES

????????????????????????數(shù)據(jù)類型。可能的值有:string, hash, set, sortedset, list。 可以提供多個(gè)類型。如果沒有指定,所有數(shù)據(jù)類型都返回。

3.1 解析dump文件并以JSON格式標(biāo)準(zhǔn)輸出

?

# /usr/local/python/bin/rdb --command json /data/redis_data/6379/dump.rdb

3.2 只解析符合正則的keys

?

# /usr/local/python/bin/rdb --command json --key "sences_2.*" /data/redis_data/6379/dump.rdb

3.3 只解析以“a”為開頭的hash且位于數(shù)據(jù)庫ID為2的

?

# /usr/local/python/bin/rdb --command json --db 2 --type hash --key "a.*" /data/redis_data/6379/dump.rdb

.?生成內(nèi)存報(bào)告

生成CSV格式的內(nèi)存報(bào)告。包含的列有:數(shù)據(jù)庫ID,數(shù)據(jù)類型,key,內(nèi)存使用量(byte),編碼。內(nèi)存使用量包含key、value和其他值。
注意:內(nèi)存使用量是近似的。在一般情況下,略低于實(shí)際值。
可以根據(jù)key或數(shù)據(jù)庫ID或數(shù)據(jù)類型對報(bào)告的內(nèi)容進(jìn)行過濾。

內(nèi)存報(bào)告有助于檢測是否是應(yīng)用程序邏輯導(dǎo)致的內(nèi)存泄露,也有助于優(yōu)化reids內(nèi)存使用情況。

?

# /usr/local/python/bin/rdb -c memory /data/redis_data/6379/dump.rdb > redis_memory_report.csv

內(nèi)容如下所示:

database,type,key,size_in_bytes,encoding,num_elements,len_largest_element

0,string,"ot_0_3b0703c01015ce05f76ef4b977dc020e820d0692",351,string,184,184

0,hash,"sences_98558",1703,hashtable,10,132

0,hash,"sences_170989",1698,hashtable,10,138

0,hash,"sences_34233",1673,hashtable,10,115

0,hash,"sence_messages2_favor_32783",358,ziplist,7,51

.?單個(gè)key所使用的內(nèi)存量

有時(shí)候,需要查詢某個(gè)key所使用的內(nèi)存。如果全部導(dǎo)出來在查找將是很愚蠢且耗時(shí)的。對于這種情景,可以使用redis-memory-for-key命令。
如果出現(xiàn)下面信息,需要安裝redis模塊。redis-memory-for-key依賴redis-py包。

?

Traceback (most recent call last):

?File "/usr/local/python/bin/redis-memory-for-key", line 8, in

?load_entry_point('rdbtools==0.1.5', 'console_scripts', 'redis-memory-for-key')()

?from redis import StrictRedis

ImportError: No module named redis

?

# /usr/local/python/bin/pip install redis

# /usr/local/python/bin/easy_install redis

?

# /usr/local/python/bin/redis-memory-for-key --help

Usage: redis-memory-for-key [options] redis-key

Examples :

redis-memory-for-key user:13423

redis-memory-for-key -h localhost -p 6379 user:13423

Options:

??-h, --help??????????? show this help message and exit

??-s HOST, --server=HOST

????????????????????????Redis Server hostname. Defaults to 127.0.0.1

??-p PORT, --port=PORT? Redis Server port. Defaults to 6379

??-a PASSWORD, --password=PASSWORD

????????????????????????Password to use when connecting to the server

??-d DB, --db=DB??????? Database number, defaults to 0

實(shí)例如下:

?

# /usr/local/python/bin/redis-memory-for-key -s 10.1.242.124?? sence_167989

Key???????????????????????????? "sence_167989"

Bytes?????????????????????????? 2712.0

Type??????????????????????????? hash

Encoding??????????????????????? hashtable

Number of Elements????????????? 15

Length of Largest Element?????? 222

.?比較RDB文件

使用–command diff選項(xiàng),并通過管道來進(jìn)行排序。

?

# /usr/local/python/bin/rdb --command diff /data/redis_data/6379/dump.rdb | sort > dump1.txt

# /usr/local/python/bin/rdb --command diff /data/redis_data/6379/dump.rdb | sort > dump2.txt

# diff dump1.txt dump2.txt

使用kdiff3工具來進(jìn)行比較,kdiff3是圖形化的工具,比較直觀。kdiff3工具比較兩個(gè)或三個(gè)輸入文件或目錄。
安裝kdiff3

?

# rpm -ivh?http://dl.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm

# yum install kdiff3

# kdiff3 dump1.txt dump2.txt

.?使用解析器

?

import sys

from rdbtools import RdbParser, RdbCallback

?

class MyCallback(RdbCallback) :

????''' Simple example to show how callback works.

????????See RdbCallback for all available callback methods.

????????See JsonCallback for a concrete example

????'''

????def set(self, key, value, expiry):

????????print('%s = %s' % (str(key), str(value)))

?

????def hset(self, key, field, value):

????????print('%s.%s = %s' % (str(key), str(field), str(value)))

?

????def sadd(self, key, member):

????????print('%s has {%s}' % (str(key), str(member)))

?

????def rpush(self, key, value) :

????????print('%s has [%s]' % (str(key), str(value)))

?

????def zadd(self, key, score, member):

????????print('%s has {%s : %s}' % (str(key), str(member), str(score)))

?

callback = MyCallback()

parser = RdbParser(callback)

parser.parse('/var/redis/6379/dump.rdb')

.?其他資源

1. FAQ:https://github.com/sripathikrishnan/redis-rdb-tools/wiki/FAQs
2. redis dump文件規(guī)范: https://github.com/sripathikrishnan/redis-rdb-tools/wiki/Redis-RDB-Dump-File-Format
3. redis RDB歷史版本: https://github.com/sripathikrishnan/redis-rdb-tools/blob/master/docs/RDB_Version_History.textile
4.?redis-rdb-tools:https://github.com/sripathikrishnan/redis-rdb-tools

.?其他工具Redis-audit?

Redis-audit 是一個(gè)用ruby實(shí)現(xiàn)的腳本,通過它,我們可以知道每一類 key 對內(nèi)存的使用量。它可以提供的數(shù)據(jù)有:某一類 key 值的訪問頻率如何,有多少值設(shè)置了過期時(shí)間,某一類 key 值使用內(nèi)存的大小,這很方便讓我們能排查哪些 key 不常用或者壓根不用。
項(xiàng)目地址:https://github.com/snmaynard/redis-audit

如需轉(zhuǎn)載請注明出處:http://www.ttlsa.com/html/2653.html

2015年11月:

Redis Info 命令以一種易于理解和閱讀的格式,返回關(guān)于 Redis 服務(wù)器的各種信息和統(tǒng)計(jì)數(shù)值。

通過給定可選的參數(shù) section ,可以讓命令只返回某一部分的信息

  • server : 一般 Redis 服務(wù)器信息,包含以下域:

    • redis_version : Redis 服務(wù)器版本
    • redis_git_sha1 : Git SHA1
    • redis_git_dirty : Git dirty flag
    • os : Redis 服務(wù)器的宿主操作系統(tǒng)
    • arch_bits : 架構(gòu)(32 或 64 位)
    • multiplexing_api : Redis 所使用的事件處理機(jī)制
    • gcc_version : 編譯 Redis 時(shí)所使用的 GCC 版本
    • process_id : 服務(wù)器進(jìn)程的 PID
    • run_id : Redis 服務(wù)器的隨機(jī)標(biāo)識符(用于 Sentinel 和集群)
    • tcp_port : TCP/IP 監(jiān)聽端口
    • uptime_in_seconds : 自 Redis 服務(wù)器啟動以來,經(jīng)過的秒數(shù)
    • uptime_in_days : 自 Redis 服務(wù)器啟動以來,經(jīng)過的天數(shù)
    • lru_clock : 以分鐘為單位進(jìn)行自增的時(shí)鐘,用于 LRU 管理
  • clients : 已連接客戶端信息,包含以下域:

    • connected_clients : 已連接客戶端的數(shù)量(不包括通過從屬服務(wù)器連接的客戶端)
    • client_longest_output_list : 當(dāng)前連接的客戶端當(dāng)中,最長的輸出列表
    • client_longest_input_buf : 當(dāng)前連接的客戶端當(dāng)中,最大輸入緩存
    • blocked_clients : 正在等待阻塞命令(BLPOP、BRPOP、BRPOPLPUSH)的客戶端的數(shù)量
  • memory : 內(nèi)存信息,包含以下域:

    • used_memory : 由 Redis 分配器分配的內(nèi)存總量,以字節(jié)(byte)為單位
    • used_memory_human : 以人類可讀的格式返回 Redis 分配的內(nèi)存總量
    • used_memory_rss : 從操作系統(tǒng)的角度,返回 Redis 已分配的內(nèi)存總量(俗稱常駐集大小)。這個(gè)值和 top 、 ps 等命令的輸出一致。
    • used_memory_peak : Redis 的內(nèi)存消耗峰值(以字節(jié)為單位)
    • used_memory_peak_human : 以人類可讀的格式返回 Redis 的內(nèi)存消耗峰值
    • used_memory_lua : Lua 引擎所使用的內(nèi)存大小(以字節(jié)為單位)
    • mem_fragmentation_ratio : used_memory_rss 和 used_memory 之間的比率
    • mem_allocator : 在編譯時(shí)指定的, Redis 所使用的內(nèi)存分配器。可以是 libc 、 jemalloc 或者 tcmalloc 。

轉(zhuǎn)載于:https://my.oschina.net/suventop/blog/1857496

總結(jié)

以上是生活随笔為你收集整理的redis-rdb-tools来解析分析reids dump文件及内存使用量的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。