Skip to main content

GETDEL

Introduction

In Dragonfly, as well as in Redis and Valkey, the GETDEL command is used to retrieve the value of a key and simultaneously delete that key from the database. This atomically combines two operations — one to get the value of the key, and another to remove the key—making it more efficient than running the individual GET and DEL commands in sequence.

Syntax

GETDEL key
  • Time complexity: O(1)
  • ACL categories: @write, @string, @fast

Parameter Explanations

  • key: The key of the value you want to retrieve and delete.

Return Values

The command returns the value stored at the given key if the key exists. If the key does not exist, nil is returned. After the operation, the key is guaranteed to be deleted from the database.

Code Examples

Basic Example

Retrieve the value and delete the key:

dragonfly> SET mykey "Hello, Dragonfly!"
OK

dragonfly> GETDEL mykey
"Hello, Dragonfly!"

dragonfly> GET mykey
(nil)

In this example, the value "Hello, Dragonfly!" is returned by GETDEL and the mykey is deleted from the database, as verified by the subsequent GET.

Retrieving and Deleting a Non-Existent Key

If the key does not exist, GETDEL will return nil without throwing an error:

dragonfly> GETDEL nonexistent_key
(nil)

Since nonexistent_key does not exist, the return is nil, and no other action is taken.

Best Practices

  • Use GETDEL when you need to retrieve and simultaneously delete a key in a single atomic operation. This can prevent race conditions that might occur if retrieving and deleting are done separately.
  • Ideal for scenarios such as caching systems, where fetching and invalidating cache must happen instantly. Or something like an OTP (one-time password) feature that allows a user to verify only once—if they fail, another OTP must be resent to their email or phone after a period of time.

Common Mistakes

  • Forgetting that after calling GETDEL, the key will no longer exist. If subsequent operations depend on the key being available, you might need to handle it differently.
  • Assuming GETDEL will work on non-string data types like hashes, lists, or sets. GETDEL only works on keys storing string values.

FAQs

What happens if the key does not exist?

If the key does not exist, GETDEL returns nil, and no other action is performed.

Can GETDEL operate on non-string data types?

No, GETDEL is intended for string keys only. If you attempt to use it on a non-string type, an error will be generated. For retrieving and deleting non-string data types, you will need to use other Redis commands.