2

I have a redis server running in a Docker container. I push values to a list in there from an outside script. When I'm in the redis container, however, redis-cli keys * returns (empty array). This isn't an issue with selecting the correct database, I've tried that. See the following terminal output:

/redis_data $ redis-cli info keyspace
# Keyspace
db0:keys=1,expires=0,avg_ttl=0
/redis_data $ redis-cli keys *
(empty array)
/redis_data $ redis-cli select 0
OK
/redis_data $ redis-cli keys *
(empty array)
/redis_data $ redis-cli keys log_list # this is the key I've been pushing to
1) "log_list"
/redis_data $ redis-cli keys dne # a key I know doesn't exist
(empty array)
Drake
  • 63
  • 8
  • Does this answer your question? [Redis command to get all available keys?](https://stackoverflow.com/questions/5252099/redis-command-to-get-all-available-keys) Your issue may be that you need to escape `*` in your command, like `redis-cli keys \*` – segFault Nov 08 '22 at 16:50
  • 1
    @segFault that question does not directly address the issue I was having, but it is indirectly hinted at by some answers. You are right about escaping the wildcard expansion of `*`, which I discovered as I made this question. See my answer below – Drake Nov 08 '22 at 17:01

1 Answers1

3

I discovered that wrapping the pattern in quotes makes it function correctly. This leads me to believe the shell is expanding my * as a shell glob before redis can see it as a pattern. See the following terminal output:

/redis_data $ ls
dump.rdb
/redis_data $ redis-cli keys *
(empty array)
/redis_data $ redis-cli keys "*"
1) "log_list"
/redis_data $ echo *
dump.rdb
/redis_data $ echo "*"
*
/redis_data $ redis-cli
127.0.0.1:6379> keys *
1) "log_list"
127.0.0.1:6379> keys "*"
1) "log_list"
127.0.0.1:6379> exit

Observe my test with echo that confirms my theory. Functionally, my redis-cli keys * was getting executed as redis-cli keys dump.rdb, which of course gave an empty array. Interestingly, this error was only possible because I had exactly one file in my working directory. If I had more than one, I would've gotten (error) ERR wrong number of arguments for 'keys' command from redis-cli keys *, which might've tipped me off to the issue.

Also worth noting is that the issue can be avoided by running redis-cli and then doing redis commands from the 127.0.0.1:port> prompt where no shell globbing is done, as seen above.

Drake
  • 63
  • 8