使用Jedis模糊删除redis集群key

直接上代码

/**
 * 通过scan模糊删除
 * @param pattern
 * @return
 */
public Long delScan(String pattern) {
     long count = 0;
     if (StringUtils.isNotBlank(pattern)) {
         Jedis jds = null;
         JedisCluster jedisCluster = null;
         String key = pattern;
         try {
             jds = this.getJedis();
             jedisCluster = this.getJedisCluster();
             ScanParams scanParams = new ScanParams();
             scanParams.count(1000);

             key = combineKey(this.group, pattern);
             if (!key.endsWith(PATTERN_CHAR)) {
                 key = key + PATTERN_CHAR;
             }
             scanParams.match(key);
             if (Objects.nonNull(jds)) {
                 count = scanDelKeys(jds, scanParams);
             } else if (Objects.nonNull(jedisCluster)){
                 for (JedisPool pool : jedisCluster.getClusterNodes().values()) {
                     Jedis jedis = pool.getResource();
                     if (jedis.info().indexOf("role:master") != -1) {
                         count += scanDelKeys(jedis, scanParams);
                     }
                 }
             }
             logger.info("成功删除缓存个数 = {},key={}", count, key);
         } catch (Exception e) {
             logger.error("删除元素数据出错: key={}", key, e);
         } finally {
             this.shutdown(jds, null, jedisCluster);
         }
     }
     return count;
 }
 /**
  * 使用scan批量删除keys
  * @param jds
  * @param scanParams
  * @return
  */
 private Long scanDelKeys(Jedis jds, ScanParams scanParams) {
     Set<String> keys = new HashSet<>();
     String cursor = ScanParams.SCAN_POINTER_START;
     long count = 0;
     do {
         //使用hscan命令获取1000条数据,使用cursor游标记录位置,下次循环使用
         ScanResult<String> scanResult = jds.scan(cursor, scanParams);
         List<String> keyList = scanResult.getResult();
         if (CollectionUtils.isNotEmpty(keyList)) {
             keys.addAll(keyList);
         }
         // 返回0 说明遍历完成
         cursor = scanResult.getCursor();
     } while (!ScanParams.SCAN_POINTER_START.equals(cursor));

     // 删除keys
     if (CollectionUtils.isNotEmpty(keys)) {
         for (String key : keys) {
             count += jds.del(key);
         }
     }
     return count;
 }

测试结果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值