Redis SET Command Explained

In Redis, the SET command sets a key to hold a given string value.

If the key already holds a value, it is overwritten with the new value. Also, any previous time to live associated with the key is discarded (assuming a successful SET operation).

Syntax

The syntax goes like this:

SET key value [ NX | XX] [GET] [ EX seconds | PX milliseconds | EXAT unix-time-seconds | PXAT unix-time-milliseconds | KEEPTTL]

Here’s an explanation of the various options:

EX secondsSets the specified expire time, in seconds.
PX millisecondSets the specified expire time, in milliseconds.
EXAT timestamp-secondSets the specified Unix time at which the key will expire, in seconds.
PXAT timestamp-millisecondsSets the specified Unix time at which the key will expire, in milliseconds.
NXOnly sets the key if it does not already exist.
XXOnly sets the key if it already exists.
KEEPTTLRetains the time to live associated with the key.
GETReturns the old string stored at the key, or nil if the key did not exist. An error is returned and SET aborted if the value stored at key is not a string.

See the Redis documentation for any changes to the above information.

Example

Here’s a basic example to demonstrate:

SET type "Dog"

Result:

OK

In this case, the SET operation was successful, and so we got a simple string reply of OK.

We can now check the value of the type key with the GET command:

GET type

Result:

"Dog"

The NX Option

Here’s an example of trying to set another value to the same key when using the NX option:

SET type "Cat" NX

Result:

(nil)

The NX option prevents the key being set if it already exists. In our case, it already exists and so the result is a null reply, or (nil).

The XX Option

Here’s an example of using the XX option:

SET type "Cat" XX

Result:

OK

The XX option prevents the key being set if it doesn’t already exist. In our case, it already exists and so the key is set.

Here’s what happens if we try to set key that doesn’t already exist:

SET country "Thailand" XX

Result:

(nil)

The key wasn’t set, because it doesn’t already exist.

The GET Option

Here’s an example of using the GET option:

SET type "Bird" GET

Result:

"Cat"

The GET option returns the old value of the key. In our case, we had previously set the type key to Cat and so that’s what is returned.

Bear in mind that the key now holds the new value:

GET type

Result:

"Bird"

This option can be used as a replacement for the GETSET command (which has been regarded as deprecated since Redis 6.2.0).

Set an Expiry Time

Here’s an example of using the EX option to set an expiry time:

SET type "Horse" EX 5

Result:

OK

The EX option allows us to set an expiry time, in seconds. In this case, I set the expiry time to 5 seconds.

Here’s what happens when I run the GET command after waiting for more than 5 seconds:

GET type

Result:

(nil)

So the key no longer exists.

We can alternatively use the PX option to specify the expiry time in milliseconds, or the EXAT option to set the Unix time at which the key will expire, in seconds, or PXAT for milliseconds.