• LiiNen's avatar
    Fix redis-cli --count (for --scan, --bigkeys, etc) was ignored unless... · 763827c9
    LiiNen authored
    Fix redis-cli --count (for --scan, --bigkeys, etc) was ignored unless --pattern was also used (#13092)
    
    The --count option for redis-cli has been released in redis 7.2.
    https://github.com/redis/redis/pull/12042
    But I have found in code, that some logic was missing for using this
    'count' option.
    
    ```
    static redisReply *sendScan(unsigned long long *it) {
        redisReply *reply;
    
        if (config.pattern)
            reply = redisCommand(context, "SCAN %llu MATCH %b COUNT %d",
                *it, config.pattern, sdslen(config.pattern), config.count);
        else
            reply = redisCommand(context,"SCAN %llu",*it);
    ```
    
    The intention was being able to using scan count.
    But in this case, the --count will be only applied when 'pattern' is
    declared.
    So, I had fix it simply, to be worked properly - even if --pattern
    option is not being used.
    
    I tested it simply with time() command several times, and I could see it
    works as intended with this commit.
    The examples of test results are below:
    ```
    # unstable build
    
    time(./redis-cli -a $AUTH -p $PORT -h $HOST --scan >/dev/null 2>/dev/null)
    
    real    0m1.287s
    user    0m0.011s
    sys     0m0.022s
    
    # count is not applied
    time(./redis-cli -a $AUTH -p $PORT -h $HOST --scan --count 1000 >/dev/null 2>/dev/null)
    
    real    0m1.117s
    user    0m0.011s
    sys     0m0.020s
    
    # count is applied with --pattern
    
    time(./redis-cli -a $AUTH -p $PORT -h $HOST --scan --count 1000 --pattern "hash:*" >/dev/null 2>/dev/null)
    
    real    0m0.045s
    user    0m0.002s
    sys     0m0.002s
    ```
    
    ```
    # fix-redis-cli-scan-count build
    time(./redis-cli -a $AUTH -p $PORT -h $HOST --scan >/dev/null 2>/dev/null)
    
    real    0m1.084s
    user    0m0.008s
    sys     0m0.024s
    
    # count is applied even if --pattern is not declared
    time(./redis-cli -a $AUTH -p $PORT -h $HOST --scan --count 1000 >/dev/null 2>/dev/null)
    
    real    0m0.043s
    user    0m0.000s
    sys     0m0.004s
    
    # of course this also applied
    time(./redis-cli -a $AUTH -p $PORT -h $HOST --scan --count 1000 --pattern "hash:*" >/dev/null 2>/dev/null)
    
    real    0m0.031s
    user    0m0.002s
    sys     0m0.002s
    ```
    
    
    
    Thanks a lot.
    763827c9
redis-cli.c 376 KB