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

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

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

1 定義

Redis大Key其實(shí)不是指的是Key,而是指Key對應(yīng)的Value。

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

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

2 如何導(dǎo)致的大Key

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

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

3 如何檢測大Key

一般來說,有兩種方法:

  • 使用--bigkeys:掃描所有的鍵,給出每種數(shù)據(jù)結(jié)構(gòu)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:獲取一個(gè)鍵的所占內(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刪除每個(gè)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漸進(jìn)式逐步刪除,直到全部刪除完成

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命令刪除每個(gè)元素

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命令刪除每個(gè)元素

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);
}

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

    redis-cli -p 6379 info命令詳解

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

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

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

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

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

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

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

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

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

    Redis解決key沖突的問題解決

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

最新評論

靖宇县| 来安县| 吐鲁番市| 邢台县| 农安县| 祁东县| 揭东县| 正镶白旗| 措勤县| 武功县| 芜湖县| 塘沽区| 巴林右旗| 靖西县| 汝阳县| 曲周县| 田东县| 安塞县| 郓城县| 临西县| 诸城市| 铁岭县| 长沙县| 上栗县| 昆明市| 新田县| 兴和县| 肃宁县| 游戏| 开江县| 楚雄市| 长垣县| 寻甸| 吉水县| 潮安县| 遂昌县| 怀仁县| 留坝县| 垦利县| 夹江县| 汉中市|