最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Redis 大Key的刪除的實現(xiàn)策略

 更新時間:2025年07月25日 11:03:48   作者:喜歡代碼的新之助  
在Redis中,刪除大key是一項需要謹慎處理的操作,本文主要介紹了Redis 大Key的刪除的實現(xiàn)策略,具有一定的參考價值,感興趣的可以了解一下

1 定義

Redis大Key其實不是指的是Key,而是指Key對應的Value。

Redis的String類型,最大可以存512MB的值,List、Hash、Set、ZSet等,可以存儲232個元素(大約42億多點),那么多大的Key算大Key呢?

一般來說,我們String需要控制在10KB以下,而集合類型的控制元素個數(shù)在5000個以下。

2 如何導致的大Key

一種,比如社交類的場景,如粉絲數(shù)增多,另外一種,可能由于報表等常年累月的積累,有可能導致大Key。

我們知道,由于Redis工作線程是單線程的,大Key刪除會導致網(wǎng)絡瀏覽阻塞、超時等一系列問題,那么我們就應該去防止大KEY的產(chǎn)生

3 如何檢測大Key

一般來說,有兩種方法:

  • 使用--bigkeys:掃描所有的鍵,給出每種數(shù)據(jù)結構Top 1 bigkey
[root@localhost ~]# redis-cli -a Redis密碼 --bigkeys
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.

# 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 '"k5889"' with 5 bytes
[00.00%] Biggest string found so far '"k607267"' with 7 bytes
[00.00%] Biggest string found so far '"k1802564"' with 8 bytes
[50.00%] Sampled 1000000 keys so far
[100.00%] Sampled 2000000 keys so far

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

Sampled 2000000 keys in the keyspace!
Total key length in bytes is 14888896 (avg len 7.44)

Biggest string found '"k1802564"' has 8 bytes

0 lists with 0 items (00.00% of keys, avg size 0.00)
0 hashs with 0 fields (00.00% of keys, avg size 0.00)
2000000 strings with 14888896 bytes (100.00% of keys, avg size 7.44)
0 streams with 0 entries (00.00% of keys, avg size 0.00)
0 sets with 0 members (00.00% of keys, avg size 0.00)
0 zsets with 0 members (00.00% of keys, avg size 0.00)
  • 使用Memery Usage:獲取一個鍵的所占內(nèi)存
127.0.0.1:6379> MEMORY USAGE k10000
(integer) 64

4 大Key的刪除

4.1 String類型

String類型一般用Del即可,如果過于龐大可以使用Unlink

4.2 Hash類型

使用hscan每次獲取少量field-value,再使用hdel刪除每個field

public void delBigHash(String bigHashKey) {
    ScanParams scanParams = new ScanParams().count(100);
    String cursor = "0";
    do {
        ScanResult<Entry<String, String>> scanResult = jedis.hscan(bigHashKey, cursor, scanParams);
        List<Entry<String, String>> entryList = scanResult.getResult();
        if (CollectionUtils.isNotEmpty(entryList)) {
            for (Entry<String, String> entry : entryList) {
                jedis.hdel(bigHashKey, entry.getKey());
            }
        }
        cursor = scanResult.getCursor();
    } while (!"0".equals(cursor));
    jedis.del(bigHashKey);
}

4.3 List類型

使用ltrim漸進式逐步刪除,直到全部刪除完成

public void delBigList(String bigListKey){
    long llen = jedis.llen(bigListKey);
    int counter = 0;
    int left = 100;
    while (counter < llen) {
        jedis.ltrim(bigListKey, left, llen);
        counter += left;
    }
    jedis.del(bigListKey);
}

4.4 Set類型

使用sscan每次獲取部分元素,再使用srem命令刪除每個元素

public void delBigSet(String bigSetKey){
    ScanParams scanParams = new ScanParams().count(100);
    String cursor = "0";
    do {
        ScanResult<String> scanResult = jedis.sscan(bigSetKey, cursor, scanParams);
        List<String> memberList = scanResult.getResult();
        if (CollectionUtils.isNotEmpty(memberList)) {
            for (String member : memberList) {
                jedis.srem(bigSetKey, member);
            }
        }
        cursor = scanResult.getCursor();
    } while (!"0".equals(cursor));
    jedis.del(bigSetKey);
}

4.5 ZSet類型

使用zscan每次獲取部分元素,再使用ZREMRANGEBYRANK命令刪除每個元素

public void delBigZSet(String bigZSetKey){
    ScanParams scanParams = new ScanParams().count(100);
    String cursor = "0";
    do {
        ScanResult<Tuple> scanResult = jedis.zscan(bigZSetKey, cursor, scanParams);
        List<Tuple> tupleList = scanResult.getResult();
        if (CollectionUtils.isNotEmpty(tupleList)) {
            for (Tuple tuple : tupleList) {
                jedis.zrem(bigZSetKey, tuple.getElement());
            }
        }
        cursor = scanResult.getCursor();
    } while (!"0".equals(cursor));
    jedis.del(bigZSetKey);
}

到此這篇關于Redis 大Key的刪除的實現(xiàn)策略的文章就介紹到這了,更多相關Redis 大Key刪除內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • redis和redission分布式鎖原理及區(qū)別說明

    redis和redission分布式鎖原理及區(qū)別說明

    文章對比了synchronized、樂觀鎖、Redis分布式鎖及Redission鎖的原理與區(qū)別,指出在集群環(huán)境下synchronized失效,樂觀鎖存在數(shù)據(jù)庫性能瓶頸,而Redission通過watchdog自動續(xù)期和Lua原子操作解決Redis鎖的超時問題,推薦其在高并發(fā)場景下的可靠性與易用性
    2025-08-08
  • Redis中原子性操作的的實現(xiàn)

    Redis中原子性操作的的實現(xiàn)

    本文主要介紹了Redis的原子性操作,包括其單線程模型和命令隊列機制,原子性的邊界,及通過事務和Lua腳本實現(xiàn)多命令的原子性,具有一定的參考價值,感興趣的可以了解一下
    2025-11-11
  • Redis數(shù)據(jù)遷移RedisShake的實現(xiàn)方法

    Redis數(shù)據(jù)遷移RedisShake的實現(xiàn)方法

    本文主要介紹了Redis數(shù)據(jù)遷移RedisShake的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • 解密Redis助力雙11背后電商秒殺系統(tǒng)(推薦)

    解密Redis助力雙11背后電商秒殺系統(tǒng)(推薦)

    這篇文章主要介紹了解密Redis助力雙11背后電商秒殺系統(tǒng),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • redis-cli -p 6379 info命令詳解

    redis-cli -p 6379 info命令詳解

    這篇文章主要介紹了redis-cli -p 6379 info命令詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • Redis高并發(fā)問題的解決方法

    Redis高并發(fā)問題的解決方法

    這篇文章主要介紹了Redis高并發(fā)問題的解決辦法,具有很好的參考價值,感興趣的小伙伴們可以參考一下,具體如下:
    2018-05-05
  • Redis分片集群的實現(xiàn)示例

    Redis分片集群的實現(xiàn)示例

    本文介紹了搭建Redis分片集群,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-12-12
  • redis實現(xiàn)紅鎖的示例代碼

    redis實現(xiàn)紅鎖的示例代碼

    在分布式系統(tǒng)中,實現(xiàn)一個可靠的鎖機制是非常重要的,本文主要介紹了redis實現(xiàn)紅鎖的示例代碼,具有一定的參考價值,感興趣的可以了解一下
    2025-04-04
  • Redis migrate數(shù)據(jù)遷移工具的使用教程

    Redis migrate數(shù)據(jù)遷移工具的使用教程

    這篇文章主要給大家介紹了關于Redis migrate數(shù)據(jù)遷移工具的使用教程,文中通過示例代碼介紹的非常詳細,對大家的學習或者使用Redis具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2020-08-08
  • Redis解決key沖突的問題解決

    Redis解決key沖突的問題解決

    本文主要介紹了Redis解決key沖突的問題解決,通過嚴格的key命名規(guī)范、RedisDB隔離、分布式并發(fā)控制和命名空間等手段,可以有效預防key沖突,感興趣的可以了解一下
    2025-11-11

最新評論

江永县| 昭苏县| 仪征市| 津市市| 吉安市| 洪洞县| 灌南县| 林芝县| 太康县| 宿松县| 沙雅县| 武平县| 阿瓦提县| 宣威市| 长阳| 泸水县| 延长县| 郧西县| 靖西县| 扎鲁特旗| 云阳县| 霍州市| 南康市| 印江| 江城| 孝义市| 陕西省| 株洲县| 深水埗区| 东阿县| 西乡县| 龙海市| 崇州市| 宾阳县| 柯坪县| 阿瓦提县| 高陵县| 防城港市| 英吉沙县| 荥经县| 汉川市|