使用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中EasyPoi多sheet导出功能实现

    Java中EasyPoi多sheet导出功能实现

    这篇文章主要介绍了Java中EasyPoi多sheet导出功能实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • SpringBoot常用数据库开发技术汇总介绍

    SpringBoot常用数据库开发技术汇总介绍

    Spring Boot常用的数据库开发技术有JDBCTemplate、JPA和Mybatis,它们分别具有不同的特点和适用场景,可以根据具体的需求选择合适的技术来进行开发
    2023-04-04
  • Spring Bean常用依赖注入方式详解

    Spring Bean常用依赖注入方式详解

    这篇文章主要介绍了Spring Bean常用三种依赖注入方式详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • 详解Springboot 优雅停止服务的几种方法

    详解Springboot 优雅停止服务的几种方法

    这篇文章主要介绍了详解Springboot 优雅停止服务的几种方法 ,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • idea运行java项目main方法报build failure错误的解决方法

    idea运行java项目main方法报build failure错误的解决方法

    当在使用 IntelliJ IDEA 运行 Java 项目的 main 方法时遇到 "Build Failure" 错误,这通常意味着在项目的构建过程中遇到了问题,以下是一些详细的解决步骤,以及一个简单的代码示例,用于展示如何确保 Java 程序可以成功构建和运行,需要的朋友可以参考下
    2024-09-09
  • 云计算实验:Java MapReduce编程

    云计算实验:Java MapReduce编程

    这篇文章主要介绍了云计算实验:Java MapReduce编程, 居于Java围绕MapReduce编程展开详细内容,文章助大家掌握MapReduce编程,理解MapReduce原理,需要的朋友可以参考一下
    2021-12-12
  • IDEA安装Activiti插件并解决乱码问题(推荐)

    IDEA安装Activiti插件并解决乱码问题(推荐)

    这篇文章主要介绍了IDEA安装Activiti插件并解决乱码问题,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • Java 判断一个时间是否在另一个时间段内

    Java 判断一个时间是否在另一个时间段内

    这篇文章主要介绍了Java 判断一个时间是否在另一个时间段内的相关资料,需要的朋友可以参考下
    2016-10-10
  • java面试常见模式问题---代理模式

    java面试常见模式问题---代理模式

    代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息
    2021-06-06
  • 详解Spring Boot 打包分离依赖JAR 和配置文件

    详解Spring Boot 打包分离依赖JAR 和配置文件

    这篇文章主要介绍了Spring Boot 打包分离依赖JAR 和配置文件,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11

最新评论