Redis中用scan代替keys查找

好多人不知道在java中如何 使用  Redistemple 操作 scan ,今天我给出一种实现方式:



@Resource(name = "redisTemplate")
private RedisTemplate redisTemplate;
/**
     * 删除登录限制redis
     * @return
     */
    @RequesMapping(value = "/redis/handle")
    public JsonResult redisHandle() {
        if (StringUtils.equals(currentEnv, Constants.ENV.TEST)) {
            final Set keys = scan("smscode:phoneno:*");
            if (!ObjectUtils.isEmpty(keys)) {
                log.info("delete keys{}", keys);
                for (Object key : keys) {
                    redisTemplate.delete(key);
                }
            }
        }
        return JsonResult.buildSuccess();


    }    
    
public Set<String> scan(String key) {
        return (Set<String>) redisTemplate.execute((RedisCallback<Set<String>>) connection -> {
            Set<String> keys = Sets.newHashSet();


            JedisCommands commands = (JedisCommands) connection.getNativeConnection();
            MultiKeyCommands multiKeyCommands = (MultiKeyCommands) commands;


            ScanParams scanParams = new ScanParams();
            scanParams.match(key);
            scanParams.count(1000);
            ScanResult<String> scan = multiKeyCommands.scan("0", scanParams);
            while (null != scan.getStringCursor()) {
                keys.addAll(scan.getResult());
                if (!"0".equals(scan.getStringCursor())) {
                    scan = multiKeyCommands.scan(scan.getStringCursor(), scanParams);
                    continue;
                } else {
                    break;
                }
            }


            return keys;
        });
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值