欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

排查Redis大key的方法總結

 更新時間:2024年08月14日 08:29:27   作者:jc0803kevin  
這篇文章主要介紹了排查Redis大key的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面跟著小編來一起學習學習吧

排查Redis大key的方法

redis-cli --bigkeys

特點:

  • 使用–bigkeys參數(shù)會掃描整個Redis數(shù)據(jù)庫,應該在低流量峰值時執(zhí)行
  • 這個方法只能返回每種類型中最大的那個bigkey,無法得到大小排到前N位的bigkey
  • 對于集合類型來說,這個方法只統(tǒng)計集合元素的多少,而不是實際占用的內存量。因為一個集合中元素個數(shù)多,并不一定占用內存就多
    @GetMapping("init")
    @Async
    public void initData(@RequestParam (name = "size", defaultValue = "5000") Integer size){

        redisTemplate.opsForValue().set("string_large_key1", generateTestData(10* 1024));
        redisTemplate.opsForValue().set("string_large_key2", generateTestData(10* 1024));

        redisTemplate.opsForSet().add("set_large_key1", new HashSet<>(50000));
        redisTemplate.opsForSet().add("set_large_key2", new HashSet<>(50000));

        redisTemplate.opsForHash().putAll("hash_large_key1", buildMapData(50000));
        redisTemplate.opsForHash().putAll("hash_large_key2", buildMapData(50000));

        redisTemplate.opsForList().rightPushAll("list_large_key1", buildListData(50000));
        redisTemplate.opsForList().rightPushAll("list_large_key2", buildListData(50000));
    }



    private Map buildMapData(int initialCapacity){

        Map<String, String> result =new HashMap<>(initialCapacity);
        for (int i = 0; i < initialCapacity; i++) {
            result.put("kevin_" + i, "123");
        }
        return result;

    }

    private List<String> buildListData(int initialCapacity){
        List<String> result = new ArrayList<>(initialCapacity);
        for (int i = 0; i < initialCapacity; i++) {
            result.add("kevin_" + i );
        }
        return result;

    }

  • 使用–bigkeys查詢
root@DESKTOP-0JS7U4E:~# redis-cli -h 127.0.0.1 -p 16379 --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 hash   found so far 'hash_large_key2' with 50000 fields

# 只返回了最大的那個bigkey
[00.00%] Biggest string found so far 'string_large_key2' with 10485762 bytes
[00.00%] Biggest set    found so far 'set_large_key2' with 1 members
[00.00%] Biggest list   found so far 'list_large_key1' with 50000 items

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

Sampled 9 keys in the keyspace!
Total key length in bytes is 135 (avg len 15.00)

Biggest   list found 'list_large_key1' has 50000 items
Biggest   hash found 'hash_large_key2' has 50000 fields
Biggest string found 'string_large_key2' has 10485762 bytes
Biggest    set found 'set_large_key2' has 1 members

# 返回了list的容量
2 lists with 100000 items (22.22% of keys, avg size 50000.00)
# 返回了hash的容量
2 hashs with 100000 fields (22.22% of keys, avg size 50000.00)
2 strings with 20971524 bytes (22.22% of keys, avg size 10485762.00)
0 streams with 0 entries (00.00% of keys, avg size 0.00)
3 sets with 3 members (33.33% of keys, avg size 1.00)
0 zsets with 0 members (00.00% of keys, avg size 0.00)
root@DESKTOP-0JS7U4E:~#

redis-cli scan VS memory usage組合

實際上bigkey的底層也使用SCAN命令執(zhí)行。

SCAN命令可以用于迭代遍歷所有key。它是一個非阻塞操作,支持游標(cursor)的方式來逐步遍歷所有key。使用SCAN命令可以避免阻塞,減少對Redis性能的影響。

Redis Scan命令說明

1、先使用scan掃描出key

127.0.0.1:16379> scan 1000 MATCH "string*"
1) "0"
2) 1) "string_large_key2"
   2) "string_large_key1"
127.0.0.1:16379>
127.0.0.1:16379> scan 0 MATCH "string*" count 20
1) "0"
2) 1) "string_large_key2"
   2) "string_large_key1"
127.0.0.1:16379>


2、使用 memory usage查詢key占用的內存大小

127.0.0.1:16379> memory usage string_large_key1
(integer) 10485831
127.0.0.1:16379>

這樣組合的方式操作比較復雜,需要對命令使用非常熟悉。在生產環(huán)境需要更快,更高效的發(fā)現(xiàn)問題還是建議使用成熟的分析工具,畢竟也都是用這些命令組合起來的。

使用云上的Redis可以直接使用CloundDBA功能

redis-rdb-tools

該三方工具Github地址redis-rdb-tools。

安裝該分析工具

python setup.py install

要使用memory功能,需要安裝

pip3 install python-lzf

如果出現(xiàn)沒有權限的問題,那就以管理員打開cmd再運行

error: [Errno 13] Permission denied: 'C:\\Python310\\Scripts\\rdb-script.py'

安裝完成之后目錄下面多出這幾個文件。

C:\Python310\Scripts>dir
....................
2024/08/08  13:38               996 rdb-script.py
2024/08/08  13:38            74,752 rdb.exe
2024/08/08  13:38             1,030 redis-memory-for-key-script.py
2024/08/08  13:38            74,752 redis-memory-for-key.exe
2024/08/08  13:38             1,018 redis-profiler-script.py
2024/08/08  13:38            74,752 redis-profiler.exe

C:\Python310\Scripts>

使用rdb進行分析

C:\Python310\Scripts>rdb --command memory --bytes 102400 \\wsl.localhost\Ubuntu-20.04\var\lib\redis\dump.rdb
database,type,key,size_in_bytes,encoding,num_elements,len_largest_element,expiry
0,hash,hash_large_key2,3186588,hashtable,50000,11,
0,hash,hash_large_key1,3186588,hashtable,50000,11,
0,string,string_large_key1,12582976,string,10485762,10485762,
0,list,list_large_key1,744355,quicklist,50000,13,
0,string,string_large_key2,12582976,string,10485762,10485762,
0,list,list_large_key2,744355,quicklist,50000,13,

C:\Python310\Scripts>

也可以加上-f參數(shù),將結果輸出到本地文件中。

rdb --command memory --bytes 102400 \\wsl.localhost\Ubuntu-20.04\var\lib\redis\dump.rdb -f d:\kevin.csv

以上就是排查Redis大key的方法總結的詳細內容,更多關于排查Redis大key的資料請關注腳本之家其它相關文章!

相關文章

  • Redis實戰(zhàn)之Jedis使用技巧詳解

    Redis實戰(zhàn)之Jedis使用技巧詳解

    Jedis?是老牌的?Redis?的?Java?客戶端,提供了比較全面的?Redis?命令的操作支持,也是目前使用最廣泛的客戶端。這篇文章主要為大家詳細介紹了Jedis的使用技巧,需要的可以參考一下
    2022-12-12
  • redis cluster支持pipeline的實現(xiàn)思路

    redis cluster支持pipeline的實現(xiàn)思路

    本文給大家介紹redis cluster支持pipeline的實現(xiàn)思路,在 cluster 上執(zhí)行 pipeline 可能會由于 redis 節(jié)點擴縮容 中途 redirection 切換連接導致結果丟失,具體細節(jié)問題請參考下本文
    2021-06-06
  • redis執(zhí)行l(wèi)ua腳本的實現(xiàn)方法

    redis執(zhí)行l(wèi)ua腳本的實現(xiàn)方法

    redis在2.6推出了腳本功能,允許開發(fā)者使用Lua語言編寫腳本傳到redis中執(zhí)行。本文就介紹了redis執(zhí)行l(wèi)ua腳本的實現(xiàn)方法,感興趣的可以了解一下
    2021-11-11
  • 解決redis批量刪除key值的問題

    解決redis批量刪除key值的問題

    在開發(fā)過程中,會遇到要批量刪除某種規(guī)則的key值,但是通常情況下沒有批量刪除某一個類的命令,遇到這種情況該如何處理呢?下面小編給大家?guī)砹藃edis批量刪除key值的問題,感興趣的朋友一起看看吧
    2022-03-03
  • 使用Redis實現(xiàn)UA池的方案

    使用Redis實現(xiàn)UA池的方案

    這篇文章主要介紹了使用Redis實現(xiàn)UA池的方案,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-11-11
  • redis-cli創(chuàng)建redis集群的實現(xiàn)

    redis-cli創(chuàng)建redis集群的實現(xiàn)

    本文主要介紹了redis-cli創(chuàng)建redis集群的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-06-06
  • redis實現(xiàn)加鎖的幾種方法示例詳解

    redis實現(xiàn)加鎖的幾種方法示例詳解

    這篇文章主要給大家介紹了關于redis實現(xiàn)加鎖的幾種方法,加鎖命令分別是INCR、SETNX和SET,文中給出了詳細的示例代碼,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2017-09-09
  • Windows下Redis?x64的安裝與使用教程詳解

    Windows下Redis?x64的安裝與使用教程詳解

    Redis是一款內存高速緩存數(shù)據(jù)庫,可以滿足我們對海量數(shù)據(jù)的讀寫需求,本文重點給大家介紹Windows下Redis?x64的安裝與使用教程,感興趣的朋友一起看看吧
    2022-03-03
  • Redis報錯:無法連接Redis服務的解決方法

    Redis報錯:無法連接Redis服務的解決方法

    在Linux系統(tǒng)上運行Redis服務時,有時會遇到“無法連接Redis服務”的報錯,本文就詳細的介紹一下解決方法,具有一定的參考價值,感興趣的可以了解一下
    2023-09-09
  • Redis如何高效刪除大key

    Redis如何高效刪除大key

    這篇文章主要介紹了Redis如何高效刪除大key問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04

最新評論