MGET
Introduction
In Dragonfly, as well as in Redis and Valkey, the MGET
command is used to retrieve the values of multiple keys in a single request.
It simplifies fetching values from several keys at once, making it highly efficient for batch retrieval.
If a key does not exist, MGET
returns nil
for that key instead of an error.
Syntax
MGET key [key ...]
- Time complexity: O(N) where N is the number of keys to retrieve.
- ACL categories: @read, @string, @fast
Parameter Explanations
key
: The key(s) whose values you want to retrieve.- You can specify multiple keys, and their values will be retrieved in the order they were provided.
Return Values
The command returns an array of values corresponding to the list of keys.
If a key does not exist, nil
is returned for that particular key.
Code Examples
Basic Example: Retrieving Multiple Keys
Retrieve values from multiple keys:
dragonfly> SET key1 "value1"
OK
dragonfly> SET key2 "value2"
OK
dragonfly> SET key3 "value3"
OK
dragonfly> MGET key1 key2 key3
1) "value1"
2) "value2"
3) "value3"
When Some Keys Do Not Exist
If one or more keys do not exist, MGET
will return nil
for the missing keys:
dragonfly> MGET key1 key_non_existent key3
1) "value1"
2) (nil)
3) "value3"
Using MGET
for Bulk Retrieval
In scenarios where you are managing session data for multiple users, you can use MGET
to efficiently retrieve their session information in one operation:
dragonfly> SET session:user1 "data1"
OK
dragonfly> SET session:user2 "data2"
OK
dragonfly> SET session:user3 "data3"
OK
dragonfly> MGET session:user1 session:user2 session:user3
1) "data1"
2) "data2"
3) "data3"
Example with Keys that Expire
If some of the keys have expired or are nearing expiration, MGET
will still retrieve available keys but return nil
for those that no longer exist:
dragonfly> SET key_expiring "temp_value" EX 1 # Expires in 1 second
OK
dragonfly> SET key_persistent "persistent_value"
OK
dragonfly> MGET key_expiring key_persistent
1) "temp_value"
2) "persistent_value"
# After 1 second
dragonfly> MGET key_expiring key_persistent
1) (nil)
2) "persistent_value"
Best Practices
- Use
MGET
to minimize network round trips when retrieving values from multiple keys at once. - Combine keys logically when possible to facilitate batch retrieval, which can significantly improve application performance.
- If some keys are expected to frequently expire, account for
nil
values in the application logic to avoid unnecessary errors.
Common Mistakes
- Forgetting that
MGET
doesn't throw an error if keys don't exist, which might lead to unexpectednil
values in the returned results. - Assuming
MGET
will throw an exception for expired or missing keys—it silently returnsnil
for those keys instead. - Not handling possible
nil
results when operating on keys subject to expiration.
FAQs
Does MGET
return an error if one of the keys does not exist?
No, if one or more keys do not exist or have expired, MGET
returns nil
for those keys without throwing an error.
Can I use MGET
with binary data?
Yes, MGET
works with binary strings, just as it does with normal strings.
It can retrieve any data stored in a binary-safe manner.
Is there a limit to how many keys I can fetch using MGET
?
There isn't a strict limit enforced by Dragonfly, Redis, or Valkey, though practical limitations such as memory or maximum payload size may apply based on available system resources.