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看到一篇帖子,說的貌似也是要這樣解決。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM