redis模糊匹配搜索

redis的模糊检索有两种方式:

1、使用keys

通配符 * ? []

其匹配的字符跟一般的正则一样。

keys a* 可以匹配以a开头的字符串。

keys语法简单,但是数据量大的时候容易出现超时异常。

2、使用scan

这里使用的是spring的一个模板redisTemplate

private Cursor<String> scan(String pattern, int limit) {
    ScanOptions options = ScanOptions.scanOptions().match(pattern).count(limit).build();
    RedisSerializer<String> redisSerializer = (RedisSerializer<String>) redisTemplate.getKeySerializer();
    return (Cursor) redisTemplate.executeWithStickyConnection(new RedisCallback() {
        @Override
        public Object doInRedis(RedisConnection redisConnection) throws DataAccessException {
                Object obj =  new ConvertingCursor<>(redisConnection.scan(options), redisSerializer::deserialize);
            try {
                redisConnection.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
            return obj;
        }
    });
}

redisConnection.close();这个是关闭连接,要不然链接数量上限之后会一直阻塞。

接收的是一个Cursor

public List<String> getAll4Value(String keyPatten,int limitCount){
    intiParam();
    List<String> lstTmp = new ArrayList<>();
    Cursor<String> cursor = scan(keyPatten,limitCount);
    while (cursor.hasNext()) {
        String key = cursor.next();
        Object obj = get(key);
        if(!StringUtils.isEmpty(obj)){
            lstTmp.add(obj.toString());
        }
    }
    return lstTmp;
}

keyPatten:正则表达式接收*、、[]

limitCount:返回的数量

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值