Jedis scan及其count的值

  之前在做统计相关功能的时候,使用到了redis的keys,但是,跑了一段时间后,被运维的慢查询给抓出来了,说这个太慢了,需要10ms(平常的命令只需要2-3ms),并且keys会造成阻塞,影响其他进程。。。

   好吧,那就改成scan。本来是是想拿百度现成的来用,但是,居然没有搜索到!amazing!好吧,那就只能扒官方了。

1.官网

首先找到Spring Data Redis官网,然后进入API链接,

2.Scan

然后,

 

3.ScanOptions---->Scan方法的参数   

这里可以看到,scan方法,需要一个scanOptions参数,点进scanOptions类,发现scanOptons有个静态内部类--scanOptionsBuilder

4.scanOptionsBuilder--->构造ScanOptions

scanOptionsBuilder类,又有count、match、build三个方法。看描述,match是充当匹配的作用,count是返回匹配到的数目,build是scanOptionsBuilder转换为scanOptions对象

 

看了这么多,其实转换为代码,就一行而已

 

 ScanOptions options = ScanOptions.scanOptions().match(workQKey).count(Integer.MAX_VALUE).build();

        Cursor c = redisConnection.scan(options);
        while (c.hasNext()) {
            logger.info(new String((byte[]) c.next()));
        }

 

 

5.scanOptionsBuilder的count参数

 

 

测试了一番,和keys的效果是一致的。but,count的参数为什么是Integer.MAX_VALUE呢?我尝试了下,把Integer.MAX_VALUE改成了100(需要统计的key有122个),然后,就飙红了

但是,你把count从100改成大于等于122,那就正常运行。按这规律,是count的参数必须不小于实际数量?我也在stackoverflow看到一篇帖子,说的貌似也是要这样解决。。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值