From aac8105c9fcbb93b8b0cb001c226478eb9ae8e75 Mon Sep 17 00:00:00 2001 From: kell0gg <83701867+kell0gg@users.noreply.github.com> Date: Thu, 11 May 2023 14:14:59 +0900 Subject: redis-cli - add option --count for scan (#12042) When using scan in redis-cli, the SCAN COUNT is fixed, which means the full scan can take a long time if there are a lot of keys, this will let users specify a bigger COUNT option. --- src/redis-cli.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/redis-cli.c b/src/redis-cli.c index 62eccf610..3f5827fbe 100644 --- a/src/redis-cli.c +++ b/src/redis-cli.c @@ -239,6 +239,7 @@ static struct config { int get_functions_rdb_mode; int stat_mode; int scan_mode; + int count; int intrinsic_latency_mode; int intrinsic_latency_duration; sds pattern; @@ -2727,6 +2728,8 @@ static int parseOptions(int argc, char **argv) { } else if (!strcmp(argv[i],"--pattern") && !lastarg) { sdsfree(config.pattern); config.pattern = sdsnew(argv[++i]); + } else if (!strcmp(argv[i],"--count") && !lastarg) { + config.count = atoi(argv[++i]); } else if (!strcmp(argv[i],"--quoted-pattern") && !lastarg) { sdsfree(config.pattern); config.pattern = unquoteCString(argv[++i]); @@ -3081,6 +3084,7 @@ version,tls_usage); " --scan List all keys using the SCAN command.\n" " --pattern Keys pattern when using the --scan, --bigkeys or --hotkeys\n" " options (default: *).\n" +" --count Count option when using the --scan, --bigkeys or --hotkeys (default: 10).\n" " --quoted-pattern Same as --pattern, but the specified string can be\n" " quoted, in order to pass an otherwise non binary-safe string.\n" " --intrinsic-latency Run a test to measure intrinsic system latency.\n" @@ -3111,6 +3115,7 @@ version,tls_usage); " redis-cli --quoted-input set '\"null-\\x00-separated\"' value\n" " redis-cli --eval myscript.lua key1 key2 , arg1 arg2 arg3\n" " redis-cli --scan --pattern '*:12345*'\n" +" redis-cli --scan --pattern '*:12345*' --count 100\n" "\n" " (Note: when using --eval the comma separates KEYS[] from ARGV[] items)\n" "\n" @@ -8826,8 +8831,8 @@ static redisReply *sendScan(unsigned long long *it) { redisReply *reply; if (config.pattern) - reply = redisCommand(context, "SCAN %llu MATCH %b", - *it, config.pattern, sdslen(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); @@ -9770,6 +9775,7 @@ int main(int argc, char **argv) { config.get_functions_rdb_mode = 0; config.stat_mode = 0; config.scan_mode = 0; + config.count = 10; config.intrinsic_latency_mode = 0; config.pattern = NULL; config.rdb_filename = NULL; -- cgit v1.2.1