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

Redis 大key的幾種刪除方式

 更新時間:2025年03月26日 09:34:44   作者:csjane1079  
大key刪除直接調(diào)用 del 命令刪除key,容易造成請求被阻塞,本文主要介紹了Redis 大key的幾種刪除方式,具有一定的參考價值,感興趣的可以了解一下

在前面的文章 Redis刪除大key時為什么會阻塞中,有說到,不應(yīng)該直接調(diào)用 del 命令刪除key,容易造成請求被阻塞,那應(yīng)該如何來處理呢?

這次從代碼編寫的角度來舉例說明下。

在Redis中,有幾個比較特殊的結(jié)構(gòu)String,List、Hash、Set、ZSet, 從Redis刪除大key時為什么會阻塞中文章可以知道,不能直接del (除了string),而應(yīng)該使用 scan的方式,而每一個類型也都有自己的scan 方式。接下來以 Java Jedis 為例。

List

String key = "demo";
int length = jedis.llen("demo");
if (length > 1024) {
    int size = 100;
    int count = 0;
    do {
        //每次處理前100個
        // redis內(nèi)部也會判斷當(dāng)前傳遞的索引有沒有超過當(dāng)前的list的長度
        // 可參閱 ltrimCommand
        jedis.ltrim(key, 0, size);
        count += size;
    }
        while (count < length);
}
jedis.del(key);

Set

String key = "demo";

long length = jedis.scard(key);
if (length > 1024) {
    //每次遍歷100個
    ScanParams scanParams = new ScanParams().count(100);
    // 傳遞的游標(biāo)
    java.lang.String cursor = "0";
    ScanResult<String> sscan;
    do {
        //傳遞 scan的參數(shù)
        sscan = jedis.sscan(key, cursor, scanParams);
        if (!CollectionUtils.isEmpty(sscan.getResult())) {
            // 遍歷返回的結(jié)果,依次刪除
            sscan.getResult().stream().forEach(member -> {
                jedis.srem(key, member);
            });
        }
        // 傳入下次遍歷的游標(biāo)
        cursor = sscan.getCursor();
    } while (!sscan.isCompleteIteration());
}
jedis.del(key);

ZSet

String key = "demo";
// 獲取zset的長度
long length = jedis.zcard(key);
if (length > 1024) {
    int size = SIZE;
    int count = 0;
    do {
        // 刪除指定的集合
        jedis.zremrangeByRank(key, 0, size);
        count += size;
    }
    while (count < length);
}
jedis.del(key);

Hash

String key = "demo";
// 獲取Hash的字段個數(shù)
long length = jedis.hlen(key);
if (length > THROLD) {
    ScanParams scanParams = new ScanParams();
    // 遍歷大小
    scanParams.count(SIZE);
    // 匹配哪些字段
    scanParams.match("*");
    ScanResult<Map.Entry<String, String>> result;
    java.lang.String cursor = "0";
    do {
        // 遍歷字段
        result = jedis.hscan(key, cursor, scanParams);
        if (!CollectionUtils.isEmpty(result.getResult())) {
            // 刪除指定的字段
            result.getResult().stream().forEach(x -> {
                jedis.hdel(key, x.getKey());
            });
        }
        cursor = result.getCursor();
    } while (!result.isCompleteIteration());
}
jedis.del(key);

到此這篇關(guān)于Redis 大key的幾種刪除方式的文章就介紹到這了,更多相關(guān)Redis 大key刪除內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • Redis 單節(jié)點(diǎn)部署的實(shí)現(xiàn)

    Redis 單節(jié)點(diǎn)部署的實(shí)現(xiàn)

    本文主要介紹了Redis 單節(jié)點(diǎn)部署的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • redis?Template.opsForValue()中方法實(shí)例詳解

    redis?Template.opsForValue()中方法實(shí)例詳解

    這篇文章主要介紹了redis?Template.opsForValue()中方法講解,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-05-05
  • redis和rabbitmq實(shí)現(xiàn)延時隊(duì)列的示例代碼

    redis和rabbitmq實(shí)現(xiàn)延時隊(duì)列的示例代碼

    在高并發(fā)場景下,延遲隊(duì)列顯得尤為重要,本文主要介紹了兩種方式,redis和rabbitmq實(shí)現(xiàn)延時隊(duì)列,具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • redis安裝和配置_動力節(jié)點(diǎn)Java學(xué)院整理

    redis安裝和配置_動力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要介紹了redis安裝和配置,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • 無法連接redis服務(wù)器問題的解決辦法(非常詳細(xì)!)

    無法連接redis服務(wù)器問題的解決辦法(非常詳細(xì)!)

    這篇文章主要介紹了如何解決Spring?Boot項(xiàng)目連接Redis失敗的問題,通過修改Redis配置文件、添加防火墻白名單或關(guān)閉防火墻,并使用RESP工具進(jìn)行測試,需要的朋友可以參考下
    2025-02-02
  • 關(guān)于Redis中bitmap的原理和使用詳解

    關(guān)于Redis中bitmap的原理和使用詳解

    這篇文章主要介紹了關(guān)于Redis中bitmap的原理和使用詳解,BitMap即位圖,使用每個位表示某種狀態(tài),適合處理整型的海量數(shù)據(jù),本質(zhì)上是哈希表的一種應(yīng)用實(shí)現(xiàn),需要的朋友可以參考下
    2023-05-05
  • redis中的常用5大數(shù)據(jù)類型

    redis中的常用5大數(shù)據(jù)類型

    這篇文章主要介紹了redis中的常用5大數(shù)據(jù)類型,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • Redis實(shí)現(xiàn)用戶關(guān)注的項(xiàng)目實(shí)踐

    Redis實(shí)現(xiàn)用戶關(guān)注的項(xiàng)目實(shí)踐

    本文主要介紹了Redis實(shí)現(xiàn)用戶關(guān)注的項(xiàng)目實(shí)踐,通過使用Redis的set數(shù)據(jù)結(jié)構(gòu)來存儲關(guān)注對象,方便高效地進(jìn)行添加和取消關(guān)注操作,具有一定的參考價值,感興趣的可以了解一下
    2024-02-02
  • Redis的Sentinel解決方案介紹與運(yùn)行機(jī)制

    Redis的Sentinel解決方案介紹與運(yùn)行機(jī)制

    這篇文章主要介紹了Redis的Sentinel解決方案介紹與運(yùn)行機(jī)制, Sentinel 是一款面向分布式服務(wù)架構(gòu)的輕量級流量控制組件,主要以流量為切入點(diǎn),從流量控制、熔斷降級、系統(tǒng)自適應(yīng)保護(hù)等多個維度來保障服務(wù)的穩(wěn)定性,需要的朋友可以參考下
    2023-07-07
  • redis主從復(fù)制的原理及實(shí)現(xiàn)

    redis主從復(fù)制的原理及實(shí)現(xiàn)

    Redis主從復(fù)制是一種數(shù)據(jù)同步機(jī)制,它通過將一個Redis實(shí)例的數(shù)據(jù)復(fù)制到其他Redis,本文主要介紹了redis主從復(fù)制的原理及實(shí)現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2023-08-08

最新評論