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);
}
});
redis 根据前缀扫描删除
最新推荐文章于 2025-10-12 23:38:03 发布
本文介绍了一种使用Java和Redis的批量删除策略,通过扫描并删除带有DeviceImport前缀的键,以优化内存管理。此过程采用分批处理,避免了因大量键同时删除可能引发的性能问题。

286

被折叠的 条评论
为什么被折叠?



