redis-dump-load
- Features
- Installation
- Usage
- Streaming
- TTL, EXPIRE and EXPIREAT
- Unicode
- Concurrent Modifications
- Dependencies
- License
redis-dump-load is a tool for dumping and restoring Redis databases to/from JSON files.
Features
- Supports all Redis data types;
- Dumps TTL and expiration times;
- Can load TTL or original expiration time for expiring keys;
- Can create pretty/human-readable dumps (keys dumped in sorted order, output indented);
- Can stream data when dumping and loading;
- Can be used as a module in a larger program or as a standalone utility;
- Uses an output format compatible with redis-dump.
Installation
redis-dump-load can be installed via pip:
pip install redis-dump-load
Usage
redisdl.py
can be used as a command line tool as follows:
# dump database 0
redis-dump > dump.json
redis-dump -o dump.json
# load into database 0
redis-load < dump.json
redis-load dump.json
The command line options are:
-
-H HOST
/--host HOST
: specify redis host -
-p PORT
/--port PORT
: specify redis port -
-s SOCKET_PATH
/--socket SOCKET_PATH
: connect to Unix socket at the specified path -
-w PASSWORD
/--password PASSWORD
: password to use when connecting to redis -
-d DATABASE
/--db DATABASE
: redis database to connect to (integer) -
-k PATTERN
/--keys PATTERN
(dumping only): dump only keys matching specified glob-style pattern -
-E ENCODING
/-encoding ENCODING
: specify encoding to use -
-o PATH
/--output PATH
: write dump to PATH rather than standard output -
-y
/--pretty
(dumping only): pretty-print JSON -
-A
/--use-expireat
(loading only): useexpireat
rather thanttl
values in the dump -
-e
/--empty
(loading only): empty redis data set before loading -
-B BACKEND
/--backend BACKEND
(loading only): streaming backend to use
redis-dump-load may also be used as a module. API documentation is available on GitHub.
Streaming
dump
will stream data unless the pretty
option is given.
load
will stream data if ijson
or jsaone are installed.
TTL, EXPIRE and EXPIREAT
When dumping, redis-dump-load dumps the TTL values for expiring keys as
well as calculated time when the keys will expire (expireat
). As Redis
does not provide a command to retrieve absolute expiration time of a
key, the expiration time is calculated using the current time on the
client's system. As such, if the time on the client system is not in
sync with time on the system where the Redis server is running,
expireat
values will be incorrect.
When loading, redis-dump-load by default uses the TTL values in the dump
(ttl
key) to set expiration times on the keys in preference to
expireat
values. This will maintain the expiration times of the keys
relative to the dump/load time but will change the absolute expiration
time of the keys. Using -A
/--use-expireat
command line option
will make redis-dump-load
use expireat
values in preference to ttl
values, setting expiring
keys to expire at the same absolute time as they had before they were
dumped (as long as system times are in sync on all machines involved).
Unicode
Redis operates on bytes and has no concept of Unicode or encodings. JSON operates on (Unicode) strings and cannot serialize binary data. Therefore, redis-dump-load has to encode Unicode strings into byte strings when loading data into Redis and decode byte strings into Unicode strings when dumping data from Redis. By default redis-dump-load uses utf-8 for encoding data sent to Redis and decoding data received from Redis. This behavior matches redis-py, whose default encoding is utf-8. A different encoding can be specified.
Concurrent Modifications
redis-dump-load does not lock the entire data set it is dumping, because Redis does not provide a way to do so. As a result, modifications to the data set made while a dump is in progress affect the contents of the dump.
Dependencies
- redis-py
- ijson or jsaone (optional, for streaming load)
- simplejson (Python 2.5 only)
License
Released under the 2 clause BSD license.