使用redisTemplate的scan方式删除批量key问题

 更新时间:2023年12月20日 08:52:11   作者:bat在等我  
这篇文章主要介绍了使用redisTemplate的scan方式删除批量key问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

redisTemplate的scan方式删除批量key

	/**
     * 删除指定前缀的一系列key
     *
     * @param pattern 匹配keys的规则
     */
    public void deleteKeysByScan(String pattern) {
        long start = System.currentTimeMillis();
        LOGGER.error("清理{}类外呼记录缓存的定时任务开始执行", pattern);
        String param = pattern + "*";
        Set<String> keys = this.getValuesForStringByScan(param);
        redisTemplate.delete(keys);
        LOGGER.error("清理{}类外呼记录缓存的定时任务执行结束,耗时:{}", pattern, (System.currentTimeMillis() - start));
    }

    /**
     * 获取匹配的所有key,使用scan避免阻塞
     *
     * @param patten 匹配keys的规则
     * @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是否存在,如果一个都匹配不到会报错:

ERR wrong number of arguments for 'del' command

当然,如果要直接在linux里面操作的话,在命令行执行以下命令:

redis-cli keys "keys" | xargs redis-cli del

keys 是要匹配的规则,和上面的prex一样。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • java随机验证码生成实现实例代码

    java随机验证码生成实现实例代码

    这篇文章主要介绍了java随机验证码生成实现实例代码的相关资料,需要的朋友可以参考下
    2017-05-05
  • Java 可视化垃圾回收_动力节点Java学院整理

    Java 可视化垃圾回收_动力节点Java学院整理

    Ben Evans是一名资深培训师兼顾问,他在演讲可视化垃圾回收中从基础谈起讨论了垃圾回收。以下是对其演讲的简短总结。感兴趣的朋友一起学习吧
    2017-05-05
  • Java实现图片上传至FastDFS入门教程

    Java实现图片上传至FastDFS入门教程

    这篇文章主要介绍了Java实现图片上传至FastDFS入门教程,通过前端ajax提交图片到后端,java处理服务器文件上传至FastDFS文件服务器系统,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • java将文件转成流文件返回给前端详细代码实例

    java将文件转成流文件返回给前端详细代码实例

    Java编程语言提供了强大的文件处理和压缩能力,下面这篇文章主要给大家介绍了关于java将文件转成流文件返回给前端的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-07-07
  • Java中InputStream重复使用问题的几种解决方案

    Java中InputStream重复使用问题的几种解决方案

    在Java开发中,InputStream是用于读取字节流的类,在许多场景下,我们可能需要重复读取InputStream中的数据,这篇文章主要介绍了Java中InputStream重复使用问题的几种解决方案,需要的朋友可以参考下
    2025-08-08
  • SpringBoot整合Zookeeper实现分布式锁的具体步骤

    SpringBoot整合Zookeeper实现分布式锁的具体步骤

    在 Spring Boot 中实现分布式锁通常可以利用 ZooKeeper 来实现,以下是整合 Spring Boot 和 ZooKeeper 实现分布式锁的基本步骤,需要的朋友可以参考下
    2025-11-11
  • 数据定位在java购物车系统中的应用

    数据定位在java购物车系统中的应用

    实现"加入购物车"功能,数据定位至关重要,它通过用户ID和商品ID等标识符实现快速查询和数据一致性,主键、外键和联合索引等数据库技术,以及Redis缓存和并发控制策略如乐观锁或分布式锁,共同保障了购物车系统的查询效率和数据安全,这些机制对高并发和大数据量的场景尤为重要
    2024-10-10
  • QTabWidget标签实现双击关闭的方法(推荐)

    QTabWidget标签实现双击关闭的方法(推荐)

    这篇文章主要介绍了QTabWidget标签实现双击关闭的方法(推荐)的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-06-06
  • Java中hasNextInt()的使用场景和注意事项

    Java中hasNextInt()的使用场景和注意事项

    hasNextInt()方法是判断控制台接收是否为整型数字,而不是接收数据,这篇文章主要介绍了Java中hasNextInt()的使用场景和注意事项的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2026-05-05
  • 一文详解Maven中依赖冲突的正确处理方法

    一文详解Maven中依赖冲突的正确处理方法

    Maven依赖冲突是 Java 开发中的常见问题,很多人遇到后习惯到处写 exclusion,本文将从 JSqlParser 版本冲突的真实案例出发,讲清楚 Maven 的依赖仲裁机制,感兴趣的小伙伴可以了解下
    2025-12-12

最新评论