redis key 模糊查询

一开始使用 keys() 这种形式,大发现网上大量文章表示,这种形式会非常耗费内存。

于是改一下方式,使用hash, (key hkey hvalue),把要模糊查询的值放到hkey上面。然后使用scan来模糊查询。效率上面没什么变化。


期间有一个问题花了不少时间:


sacanBuider.match("*t*")  匹配hkey,而hkey是序列化过的,头部加了标识,所以导致 t* 这样通配符失效。后来不redis.setHashKeySerializer(new StringRedisSerializer());  

ok了,不知道有没有人遇到这种问题,有没有其他办法。


这种模糊查询效率没有经过大数据的测试,不知道是否是好办法。


Test代码:

   
    public void redishashTest11(){
   
    redis.setKeySerializer(new StringRedisSerializer());    
    redis.setValueSerializer(new Jackson2JsonRedisSerializer(String.class)); 
    redis.setHashKeySerializer(new StringRedisSerializer());  
    redis.setHashValueSerializer(new StringRedisSerializer());
    BoundHashOperations bo = redis.boundHashOps("testhash");


      //redis.setValueSerializer(new Jackson2JsonRedisSerializer(String.class));    
     //  redis.afterPropertiesSet();    
    //redis.boundValueOps("test").set("czltest");
    StringRedisSerializer sser = new StringRedisSerializer();
   
      bo.put("test1", "xxx3");
      bo.put("est2", "cxx4");
      
    ScanOptionsBuilder sacanBuider=  new ScanOptionsBuilder();
        sacanBuider.match("*t*");
        ScanOptions so =sacanBuider.build();
        System.out.println("so.toOptionString():"+so.toOptionString());
        org.springframework.data.redis.core.Cursor cur = bo.scan(sacanBuider.build());
       
       
        try {
        //cur.open();
        while(cur.hasNext()){
        Map.Entry e= (Map.Entry) cur.next();
        System.out.println("key:"+e.getKey()+" vaule:"+e.getValue());
        }
    cur.close();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
       
     }
    

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值