使用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线程之间数据传递的实现示例(4种)

    Java线程之间数据传递的实现示例(4种)

    我们经常会遇到父子线程数据传递(非调用参数)的场景,本文主要介绍了Java线程之间数据传递的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-08-08
  • 一文解决pom.xml报错Dependency "xxx" not found的问题

    一文解决pom.xml报错Dependency "xxx" not f

    我们在使用maven进行jar包管理时有时会遇到pom.xml中报错Dependency “XXX” not found,所以在本文中将给大家介绍一下pom.xml报错Dependency "xxx" not found的解决方案,需要的朋友可以参考下
    2024-01-01
  • Java 异步回调机制实例分析

    Java 异步回调机制实例分析

    这篇文章主要介绍了Java 异步回调机制实例解析的相关资料,需要的朋友可以参考下
    2017-02-02
  • Java StackOverflowError详解

    Java StackOverflowError详解

    这篇文章主要介绍了Java StackOverflowError详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • SpringBoot实现扫码登录的示例代码

    SpringBoot实现扫码登录的示例代码

    本文主要介绍了SpringBoot实现扫码登录的示例代码,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • Java自定义线程池的实现示例

    Java自定义线程池的实现示例

    本文主要介绍了Java自定义线程池的实现示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • 浅析Java中的 new 关键字

    浅析Java中的 new 关键字

    java中的new关键字是实例化对象,接下来本文通过一个案例给大家讲解Java中的 new 关键字,感兴趣的朋友可以参考下
    2016-08-08
  • Java实现指定线程执行顺序的三种方式示例

    Java实现指定线程执行顺序的三种方式示例

    这篇文章主要介绍了Java实现指定线程执行顺序的三种方式,包括通过共享对象锁加上可见变量,通过主线程Join()以及通过线程执行时Join()等三种实现方法,需要的朋友可以参考下
    2019-01-01
  • Java面向对象之作用域详细解读

    Java面向对象之作用域详细解读

    这篇文章主要介绍了Java面向对象之作用域详细解读,在java编程中,主要的变量就是属性和局部变量,局部变量一般是指在成员方法中定义的变量,局部变量也就是除了属性之外的其他变量,作用域为定义他的代码块中,需要的朋友可以参考下
    2024-01-01
  • 基于jstree使用JSON数据组装成树

    基于jstree使用JSON数据组装成树

    这篇文章主要为大家详细介绍了基于jstree使用JSON数据组装成树,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08

最新评论