使用redisTemplate的scan方式刪除批量key問(wèn)題
redisTemplate的scan方式刪除批量key
	/**
     * 刪除指定前綴的一系列key
     *
     * @param pattern 匹配keys的規(guī)則
     */
    public void deleteKeysByScan(String pattern) {
        long start = System.currentTimeMillis();
        LOGGER.error("清理{}類外呼記錄緩存的定時(shí)任務(wù)開(kāi)始執(zhí)行", pattern);
        String param = pattern + "*";
        Set<String> keys = this.getValuesForStringByScan(param);
        redisTemplate.delete(keys);
        LOGGER.error("清理{}類外呼記錄緩存的定時(shí)任務(wù)執(zhí)行結(jié)束,耗時(shí):{}", pattern, (System.currentTimeMillis() - start));
    }
    /**
     * 獲取匹配的所有key,使用scan避免阻塞
     *
     * @param patten 匹配keys的規(guī)則
     * @return 返回獲取到的keys
     */
    public Set<String> getValuesForStringByScan(String patten) {
        return redisTemplate.execute(connect -> {
            Set<String> binaryKeys = new HashSet<>();
            Cursor<byte[]> cursor = connect.scan(new ScanOptions.ScanOptionsBuilder().match(patten).count(200000).build());
            while (cursor.hasNext() && binaryKeys.size() < 200000) {
                binaryKeys.add(new String(cursor.next()));
            }
            return binaryKeys;
        }, true);
    }
Java使用RedisTemplate模糊刪除key
Redis模糊匹配批量刪除操作,使用RedisTemplate操作:
    public void deleteByPrex(String prex) {
        Set<String> keys = redisTemplate.keys(prex);
        if (CollectionUtils.isNotEmpty(keys)) {
            redisTemplate.delete(keys);
        }
    }prex為迷糊匹配的key,如cache:user:*
這里需要判斷keys是否存在,如果一個(gè)都匹配不到會(huì)報(bào)錯(cuò):
ERR wrong number of arguments for 'del' command
當(dāng)然,如果要直接在linux里面操作的話,在命令行執(zhí)行以下命令:
redis-cli keys "keys" | xargs redis-cli del
keys 是要匹配的規(guī)則,和上面的prex一樣。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- redis redistemplate序列化對(duì)象配置方式
 - 配置redis的序列化,注入RedisTemplate方式
 - 解讀RedisTemplate的各種操作(set、hash、list、string)
 - Redis Template使用詳解示例教程
 - RedisTemplate批量操作工具類性能測(cè)試
 - redistemplate下opsForHash操作示例
 - 解決redisTemplate向redis中插入String類型數(shù)據(jù)時(shí)出現(xiàn)亂碼問(wèn)題
 - 解決RedisTemplate存儲(chǔ)至緩存數(shù)據(jù)出現(xiàn)亂碼的情況
 - reids自定義RedisTemplate以及亂碼問(wèn)題解決
 
相關(guān)文章
 Java線程之間數(shù)據(jù)傳遞的實(shí)現(xiàn)示例(4種)
我們經(jīng)常會(huì)遇到父子線程數(shù)據(jù)傳遞(非調(diào)用參數(shù))的場(chǎng)景,本文主要介紹了Java線程之間數(shù)據(jù)傳遞的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-08-08
 一文解決pom.xml報(bào)錯(cuò)Dependency "xxx" not f
我們?cè)谑褂胢aven進(jìn)行jar包管理時(shí)有時(shí)會(huì)遇到pom.xml中報(bào)錯(cuò)Dependency “XXX” not found,所以在本文中將給大家介紹一下pom.xml報(bào)錯(cuò)Dependency "xxx" not found的解決方案,需要的朋友可以參考下2024-01-01
 Java 異步回調(diào)機(jī)制實(shí)例分析
這篇文章主要介紹了Java 異步回調(diào)機(jī)制實(shí)例解析的相關(guān)資料,需要的朋友可以參考下2017-02-02
 SpringBoot實(shí)現(xiàn)掃碼登錄的示例代碼
本文主要介紹了SpringBoot實(shí)現(xiàn)掃碼登錄的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
 Java實(shí)現(xiàn)指定線程執(zhí)行順序的三種方式示例
這篇文章主要介紹了Java實(shí)現(xiàn)指定線程執(zhí)行順序的三種方式,包括通過(guò)共享對(duì)象鎖加上可見(jiàn)變量,通過(guò)主線程Join()以及通過(guò)線程執(zhí)行時(shí)Join()等三種實(shí)現(xiàn)方法,需要的朋友可以參考下2019-01-01
 基于jstree使用JSON數(shù)據(jù)組裝成樹(shù)
這篇文章主要為大家詳細(xì)介紹了基于jstree使用JSON數(shù)據(jù)組裝成樹(shù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08

