redis 根據前綴掃描刪除

ThreadUtil.execute(() -> {
    try {
        Set<String> keys = new HashSet<>();
        this.globalRedisTemplate.execute((RedisConnection connection) -> {
            Cursor<byte[]> cursor = connection.scan(ScanOptions.scanOptions().count(Integer.MAX_VALUE).match("*DeviceImport*").build());
            cursor.forEachRemaining(item -> {
                //符合條件的key
                String keyDel = new String(item, StandardCharsets.UTF_8);
                keys.add(keyDel);
                if(CollUtil.isNotEmpty(keys) && keys.size() > 1000){
                    log.debug("清除設備入庫臨時媒體ID緩存 查詢key達到1000,執行刪除...");
                    globalRedisTemplate.delete(keys);
                    keys.clear();
                    log.debug("清除設備入庫臨時媒體ID緩存 刪除成功...");
                }
            });
            if(CollUtil.isNotEmpty(keys)){
                log.debug("清除設備入庫臨時媒體ID緩存 查詢到最後一批key:{},執行刪除...",keys.size());
                globalRedisTemplate.delete(keys);
                keys.clear();
                log.debug("清除設備入庫臨時媒體ID緩存 刪除最後一批成功...");
            }
            log.debug("清除設備入庫臨時媒體ID緩存 finish...");
            return null;
        });
    } catch (Exception e) {
        log.error("清除設備入庫臨時媒體ID緩存異常:", e);
    }
});
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章