4 Ways to Set a Key and its Expiry in Redis

Redis provides us with quite a few options for setting keys and any timeouts associated with those keys. Sometimes we can do it with a single command, other times we need two commands.

Here are four ways to set a key and its expiry in Redis.

The SET Command

Let’s start with the SET command. This command allows us to set a string and any associated timeout all in one go. If you’re working with a string, this command is likely all you’ll need for setting the string and its expiry.

We can specify the expiry in seconds, milliseconds, as a Unix timestamp in seconds, or as a Unix timestamp in milliseconds.

Example:

SET coupon "24 Hour Sale" EX 86400

Result:

OK

Now that we’ve set the string and its associated expiry, let’s use the TTL command to check its current time to live:

TTL coupon

Result:

(integer) 86390

In this case, we used the EX argument, which allows us to specify the timeout in seconds. We can alternatively specify it in milliseconds. To do this, we’d use PX instead of EX:

SET coupon "24 Hour Sale" PX 86400000

Result:

OK

And in keeping with the milliseconds theme, we can use the PTTL command to get the current time to live, in milliseconds:

PTTL coupon

Result:

(integer) 86351300

We can alternatively use the EXAT or PXAT option to set the expiry as a Unix timestamp. EXAT specifies the Unix timestamp in seconds, whereas PXAT specifies it in milliseconds.

Here’s an example of setting the expiry as a Unix timestamp in seconds:

SET coupon "24 Hour Sale" EXAT 1659407790

Result:

OK

We can use the EXPIRETIME command to return this value:

EXPIRETIME coupon

Result:

(integer) 1659407790

As mentioned, we can use the PXAT option to set the expiry as a Unix timestamp in milliseconds instead of seconds:

SET coupon "24 Hour Sale" PXAT 1659410231994

Result:

OK

We can use the PEXPIRETIME command to return this value:

PEXPIRETIME coupon

Result:

(integer) 1659410231994

The SETEX Command

The SETEX command is a more specific command that is specifically designed to set a key and its expiry at once:

SETEX coupon 86400 "24 Hour Sale"

Result:

OK

It’s possible that this command could be deprecated at some stage, given its functionality can be provided by the SET command.

The PSETEX Command

The PSETEX command is basically the same as the SETEX command, except that it sets the expiry in milliseconds:

PSETEX coupon 86400000 "24 Hour Sale"

Result:

OK

As with SETEX, it’s possible that PSET could be deprecated at some stage, given that its functionality can be provided by the SET command.

Set the Expiry Separately

We can also set the key and its expiry in two separate operations. In some cases, this could be your only option, for example if you’ve already set the key, or if you’re setting a different data type.

Here’s an example of creating a list and setting its expiry in two separate operations:

LPUSH scores 10 12 75

Result:

(integer) 3

That created the list (assuming the list didn’t already exist).

Now let’s use EXPIRE to set an expiry for the list:

EXPIRE scores 86400

Result:

(integer) 1

And we can now check its current time to live:

TTL scores

Result:

(integer) 86321

We can alternatively use the PEXPIRE command to specify the amount in milliseconds.

We can also use the EXPIREAT command to specify a Unix timestamp in seconds, or the PEXPIREAT command to specify it in milliseconds.

Here’s an example that uses the EXPIREAT command:

EXPIREAT scores 1659412496

Result:

(integer) 1