KEYS
KEYS pattern
- Available since
- 1.0.0
- Time complexity
- O(N) with N being the number of keys in the database, under the assumption that the key names in the database and the given pattern have limited length.
- ACL categories
- @keyspace, @read, @slow, @dangerous
Returns all keys matching pattern
.
While the time complexity for this operation is O(N), the constant times are fairly low. For example, Redict running on an entry level laptop can scan a 1 million key database in 40 milliseconds.
Warning: consider KEYS
as a command that should only be used in production
environments with extreme care.
It may ruin performance when it is executed against large databases.
This command is intended for debugging and special operations, such as changing
your keyspace layout.
Don’t use KEYS
in your regular application code.
If you’re looking for a way to find keys in a subset of your keyspace, consider
using SCAN
or sets.
Supported glob-style patterns:
h?llo
matcheshello
,hallo
andhxllo
h*llo
matcheshllo
andheeeello
h[ae]llo
matcheshello
andhallo,
but nothillo
h[^e]llo
matcheshallo
,hbllo
, … but nothello
h[a-b]llo
matcheshallo
andhbllo
Use \
to escape special characters if you want to match them verbatim.
When using Redict Cluster, the search is optimized for patterns that imply a single slot.
If a pattern can only match keys of one slot,
Redict only iterates over keys in that slot, rather than the whole database,
when searching for keys matching the pattern.
For example, with the pattern {a}h*llo
, Redict would only try to match it with the keys in slot 15495, which hash tag {a}
implies.
To use pattern with hash tag, see Hash tags in the Cluster specification for more information.
Examples #
MSET firstname Jack lastname Stuntman age 35
KEYS *name*
KEYS a??
KEYS *