<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          如何發(fā)現(xiàn) Redis 內存占用大 key

          共 2922字,需瀏覽 6分鐘

           ·

          2021-09-10 14:00

          Redis 中的大 key 一直是重點需要優(yōu)化的對象,big key 既占用比較多的內存,也可能占用比較多的網卡資源,造成 Redis 阻塞,因此需要找到這些 big key 進行優(yōu)化。


          0x01:redis-rdb-tools工具

          在 redis 實例上執(zhí)行 bgsave,然后對 dump 出來的 rdb文件進行分析,找到其中的大 key。

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

          rdbtools 工 具包括了3個可執(zhí)行文件:

          • rdb 解析整個rdb文件

          • redis-memory-for-key 解析server里的單個key

          • redis-profiler  解析rdb文件成html格式

          源碼安裝redis-rdb-tools

          git clone https://github.com/sripathikrishnan/redis-rdb-tools
          cd redis-rdb-tools
          python setup.py install


          安裝 python-lzf,加快解析速度

          pip install python-lzf

          推薦 PyPI 安裝方式

          pip install rdbtools python-lzf


          0x02:redis-cli --bigkeys 命令

          可以找到某個實例5種數(shù)據類型 String、hash、list、set、zset 的最大key

          [redis@olive bin]$ ./redis-cli -h 127.0.0.1 -p 6379 --bigkeys

          # Scanning the entire keyspace to find biggest keys as well as
          # average sizes per key type.  You can use -i 0.1 to sleep 0.1 sec
          # per 100 SCAN commands (not usually needed).

          [00.00%] Biggest string found so far 'artisan43206' with 12 bytes
          [37.40%] Biggest string found so far 'artisanBIG' with 26890 bytes

          -------- summary -------

          Sampled 100004 keys in the keyspace!
          Total key length in bytes is 1188921 (avg len 11.89)

          Biggest string found 'artisanBIG' has 26890 bytes

          100004 strings with 1215805 bytes (100.00of keys, avg size 12.16)
          0 lists with 0 items (00.00of keys, avg size 0.00)
          0 sets with 0 members (00.00of keys, avg size 0.00)
          0 hashs with 0 fields (00.00of keys, avg size 0.00)
          0 zsets with 0 members (00.00of keys, avg size 0.00)
          0 streams with 0 entries (00.00of keys, avg size 0.00)
          [redis@olive bin]$ 
          • 該命令使用 scan 方式對 key 進行統(tǒng)計,所以使用時無需擔心對 redis 造成阻塞。

          • 輸出大概分為兩部分,summary 之上的部分,只是顯示了掃描的過程。summary 部分給出了每種數(shù)據結構中最大的Key。

          • 統(tǒng)計出的最大 key 只有 string 類型是以字節(jié)長度為衡量標準的。list、set、zset 等都是以元素個數(shù)作為衡量標準,不能說明其占的內存就一定多。所以,如果存儲的Key 主要以 string 類型存在,這種方法就比較適合。


          0x03:自定義掃描腳本

          以 Python 腳本居多,使用方式與 redis-cli --bigkeys類似。


          0x04:debug object key 命令

          可以查看某個 key 序列化后的長度,每次只能查找單個 key 的信息。不推薦使用該方式。


          0x05:memory usage 命令


          Redis 4.0 引入了 memory usage 命令和 lazyfree 機制。不管是對 big key 的發(fā)現(xiàn),還是解決 big key 刪除或者過期造成的阻塞問題都有明顯的提升。

          memory usage 使用非常簡單,直接按 memory usage key名字;如果當前key 存在,則返回 key 的 value 實際使用內存估算值;如果 key 不存在,則返回 nil。

          喜歡,在看

          瀏覽 67
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  五月天婷婷小说网 | 成人五月天婷婷 | 在线天堂a | 视频一区二区免费 | 亚洲成人无码高清 |