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

排查Redis大key的方法總結(jié)

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

排查Redis大key的方法

redis-cli --bigkeys

特點(diǎn):

  • 使用–bigkeys參數(shù)會(huì)掃描整個(gè)Redis數(shù)據(jù)庫(kù),應(yīng)該在低流量峰值時(shí)執(zhí)行
  • 這個(gè)方法只能返回每種類型中最大的那個(gè)bigkey,無(wú)法得到大小排到前N位的bigkey
  • 對(duì)于集合類型來(lái)說(shuō),這個(gè)方法只統(tǒng)計(jì)集合元素的多少,而不是實(shí)際占用的內(nèi)存量。因?yàn)橐粋€(gè)集合中元素個(gè)數(shù)多,并不一定占用內(nèi)存就多
    @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

# 只返回了最大的那個(gè)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組合

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

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

Redis Scan命令說(shuō)明

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占用的內(nèi)存大小

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

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

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

redis-rdb-tools

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

安裝該分析工具

python setup.py install

要使用memory功能,需要安裝

pip3 install python-lzf

如果出現(xiàn)沒(méi)有權(quán)限的問(wèn)題,那就以管理員打開(kāi)cmd再運(yùn)行

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

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

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進(jìn)行分析

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ù),將結(jié)果輸出到本地文件中。

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

以上就是排查Redis大key的方法總結(jié)的詳細(xì)內(nèi)容,更多關(guān)于排查Redis大key的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

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

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

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

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

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

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

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

    解決redis批量刪除key值的問(wèn)題

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

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

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

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

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

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

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

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

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

    Redis報(bào)錯(cuò):無(wú)法連接Redis服務(wù)的解決方法

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

    Redis如何高效刪除大key

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

最新評(píng)論