---
acl_categories:
- '@keyspace'
- '@write'
- '@fast'
arguments:
- display_text: key
key_spec_index: 0
name: key
type: key
- display_text: unix-time-seconds
name: unix-time-seconds
type: unix-time
- arguments:
- display_text: nx
name: nx
token: NX
type: pure-token
- display_text: xx
name: xx
token: XX
type: pure-token
- display_text: gt
name: gt
token: GT
type: pure-token
- display_text: lt
name: lt
token: LT
type: pure-token
name: condition
optional: true
since: 7.0.0
type: oneof
arity: -3
categories:
- docs
- develop
- stack
- oss
- rs
- rc
- oss
- kubernetes
- clients
command_flags:
- write
- fast
complexity: O(1)
description: Sets the expiration time of a key to a Unix timestamp.
group: generic
hidden: false
history:
- - 7.0.0
- 'Added options: `NX`, `XX`, `GT` and `LT`.'
key_specs:
- RW: true
begin_search:
spec:
index: 1
type: index
find_keys:
spec:
keystep: 1
lastkey: 0
limit: 0
type: range
update: true
linkTitle: EXPIREAT
railroad_diagram: /images/railroad/expireat.svg
since: 1.2.0
summary: Sets the expiration time of a key to a Unix timestamp.
syntax_fmt: EXPIREAT key unix-time-seconds [NX | XX | GT | LT]
title: EXPIREAT
---
`EXPIREAT` has the same effect and semantic as [`EXPIRE`]({{< relref "/commands/expire" >}}), but instead of
specifying the number of seconds representing the TTL (time to live), it takes
an absolute [Unix timestamp][hewowu] (seconds since January 1, 1970). A
timestamp in the past will delete the key immediately.
[hewowu]: http://en.wikipedia.org/wiki/Unix_time
Please for the specific semantics of the command refer to the documentation of
[`EXPIRE`]({{< relref "/commands/expire" >}}).
## Background
`EXPIREAT` was introduced in order to convert relative timeouts to absolute
timeouts for the AOF persistence mode.
Of course, it can be used directly to specify that a given key should expire at
a given time in the future.
## Options
The `EXPIREAT` command supports a set of options:
* `NX` -- Set expiry only when the key has no expiry
* `XX` -- Set expiry only when the key has an existing expiry
* `GT` -- Set expiry only when the new expiry is greater than current one
* `LT` -- Set expiry only when the new expiry is less than current one
A non-volatile key is treated as an infinite TTL for the purpose of `GT` and `LT`.
The `GT`, `LT` and `NX` options are mutually exclusive.
## Examples
{{% redis-cli %}}
SET mykey "Hello"
EXISTS mykey
EXPIREAT mykey 1293840000
EXISTS mykey
{{% /redis-cli %}}
## Redis Software and Redis Cloud compatibility
| Redis
Software | Redis
Cloud | Notes |
|:----------------------|:-----------------|:------|
| ✅ Standard
✅ Active-Active | ✅ Standard
✅ Active-Active | |
## Return information
{{< multitabs id="expireat-return-info"
tab1="RESP2"
tab2="RESP3" >}}
One of the following:
* [Integer reply](../../develop/reference/protocol-spec#integers): `0` if the timeout was not set; for example, the key doesn't exist, or the operation was skipped because of the provided arguments.
* [Integer reply](../../develop/reference/protocol-spec#integers): `1` if the timeout was set.
-tab-sep-
One of the following:
* [Integer reply](../../develop/reference/protocol-spec#integers): `0` if the timeout was not set; for example, the key doesn't exist, or the operation was skipped because of the provided arguments.
* [Integer reply](../../develop/reference/protocol-spec#integers): `1` if the timeout was set.
{{< /multitabs >}}