---
acl_categories:
- '@keyspace'
- '@write'
- '@slow'
- '@dangerous'
arguments:
- display_text: key
key_spec_index: 0
name: key
type: key
- display_text: ttl
name: ttl
type: integer
- display_text: serialized-value
name: serialized-value
type: string
- display_text: replace
name: replace
optional: true
since: 3.0.0
token: REPLACE
type: pure-token
- display_text: absttl
name: absttl
optional: true
since: 5.0.0
token: ABSTTL
type: pure-token
- display_text: seconds
name: seconds
optional: true
since: 5.0.0
token: IDLETIME
type: integer
- display_text: frequency
name: frequency
optional: true
since: 5.0.0
token: FREQ
type: integer
arity: -4
categories:
- docs
- develop
- stack
- oss
- rs
- rc
- oss
- kubernetes
- clients
command_flags:
- write
- denyoom
complexity: O(1) to create the new key and additional O(N*M) to reconstruct the serialized
value, where N is the number of Redis objects composing the value and M their average
size. For small string values the time complexity is thus O(1)+O(1*M) where M is
small, so simply O(1). However for sorted set values the complexity is O(N*M*log(N))
because inserting values into sorted sets is O(log(N)).
description: Creates a key from the serialized representation of a value.
group: generic
hidden: false
history:
- - 3.0.0
- Added the `REPLACE` modifier.
- - 5.0.0
- Added the `ABSTTL` modifier.
- - 5.0.0
- Added the `IDLETIME` and `FREQ` options.
key_specs:
- OW: true
begin_search:
spec:
index: 1
type: index
find_keys:
spec:
keystep: 1
lastkey: 0
limit: 0
type: range
update: true
linkTitle: RESTORE
railroad_diagram: /images/railroad/restore.svg
since: 2.6.0
summary: Creates a key from the serialized representation of a value.
syntax_fmt: "RESTORE key ttl serialized-value [REPLACE] [ABSTTL]\n [IDLETIME\_seconds]\
\ [FREQ\_frequency]"
title: RESTORE
---
Create a key associated with a value that is obtained by deserializing the
provided serialized value (obtained via [`DUMP`]({{< relref "/commands/dump" >}})).
If `ttl` is 0 the key is created without any expire, otherwise the specified
expire time (in milliseconds) is set.
If the `ABSTTL` modifier was used, `ttl` should represent an absolute
[Unix timestamp][hewowu] (in milliseconds) in which the key will expire.
[hewowu]: http://en.wikipedia.org/wiki/Unix_time
For eviction purposes, you may use the `IDLETIME` or `FREQ` modifiers. See
[`OBJECT`]({{< relref "/commands/object" >}}) for more information.
`RESTORE` will return a "Target key name is busy" error when `key` already
exists unless you use the `REPLACE` modifier.
`RESTORE` checks the RDB version and data checksum.
If they don't match an error is returned.
## Examples
```
redis> DEL mykey
0
redis> RESTORE mykey 0 "\n\x17\x17\x00\x00\x00\x12\x00\x00\x00\x03\x00\
x00\xc0\x01\x00\x04\xc0\x02\x00\x04\xc0\x03\x00\
xff\x04\x00u#<\xc0;.\xe9\xdd"
OK
redis> TYPE mykey
list
redis> LRANGE mykey 0 -1
1) "1"
2) "2"
3) "3"
```
## Redis Software and Redis Cloud compatibility
| Redis
Software | Redis
Cloud | Notes |
|:----------------------|:-----------------|:------|
| ✅ Standard
❌ Active-Active\* | ✅ Standard
❌ Active-Active\* | \*Only supported for module keys. |
## Return information
{{< multitabs id="restore-return-info"
tab1="RESP2"
tab2="RESP3" >}}
[Simple string reply](../../develop/reference/protocol-spec#simple-strings): `OK`.
-tab-sep-
[Simple string reply](../../develop/reference/protocol-spec#simple-strings): `OK`.
{{< /multitabs >}}