When using Redis, we often have many ways to do the same thing. One example of this is with deleting keys.
Below are four options for deleting keys in Redis.
The DEL
Command
The most obvious option is the DEL
command. This is a generic command that deletes the specified key/s.
Example:
DEL user
Result:
(integer) 1
This command returns the number of keys that were deleted.
We can delete more than one key at once with this command. Therefore, we can do the following:
DEL user age pets
Result:
(integer) 3
In this case all three keys were deleted.
The GETDEL
Command
The GETDEL
command is a string command that returns the value of a key and then deletes it.
Example:
GETDEL user
Result:
"Homer"
In this case the value of the key was Homer
. The key was deleted once its value was returned. To verify this, we can run the command again:
GETDEL user
Result:
(nil)
The UNLINK
Command
The UNLINK
command is a generic command that’s similar to the DEL
command in that it removes the specified keys. However, the UNLINK
command performs the actual memory reclaiming in a different thread, so it is not blocking, whereas DEL
is.
Here’s an example of using UNLINK
:
UNLINK user
Result:
(integer) 1
As with DEL
, the UNLINK
command allows us to delete/unlink multiple keys at once:
UNLINK user age pets
Result:
(integer) 3
Expire the Key
Another way to delete a key is to use a command that expires it. For example we can use EXPIRE
to specify an amount in seconds or PEXPIRE
to specify an amount in milliseconds. We can alternatively use EXPIREAT
to specify the Unix timestamp in seconds, or PEXPIREAT
to specify the Unix timestamp in milliseconds.
Here’s an example of using EXPIRE
:
EXPIRE user 0
Result:
(integer) 1
In this case I specified an expiry of 0
, which expired the key immediately. Now when I try to access the key, I get nil
:
GET user
Result:
(nil)
An alternative option is to specify the amount as a Unix timestamp. Here’s an example of specifying the Unix timestamp in seconds:
EXPIREAT age 1658540000
Result:
(integer) 1
This Unix timestamp is in the past, and so the key is expired immediately. Now when I try to access it, I get nil
:
GET age
Result:
(nil)