README.md in redis-copy-0.0.6 vs README.md in redis-copy-1.0.0.rc.0
- old
+ new
@@ -1,15 +1,14 @@
# Redis::Copy
This utility provides a way to move the contents of one redis DB to another
redis DB. It is inspired by the [redis-copy.rb script][original] included in
-the redis source, but supports the following additional features:
+the redis source, but aims to always support all object types and to use the
+most-efficient methods and commands available to your redis versions:
- - all known data types (original supported `set`, `list`, and `string`,
- dropping the others without warning)
- if available on both dbs, will use `DUMP`/`RESTORE` commands (redis v2.6+)
- - support for more than just db0
+ - if available on source db, will use `SCAN` instead of `KEYS` (redis v2.8+)
[original]: https://github.com/antirez/redis/commits/unstable/utils/redis-copy.rb
## Installation
@@ -19,21 +18,22 @@
The current options can be grabbed using the `--help` flag.
```
$ redis-copy --help
-redis-copy v0.0.5
+redis-copy v1.0.0.rc.0 (with redis-rb 3.0.6)
Usage: redis-copy [options] <source> <destination>
<source> and <destination> must be redis connection uris
like [redis://][<username>:<password>@]<hostname>[:<port>][/<db>]
Specific options:
- --strategy STRATEGY Select strategy (auto, new, classic) (default auto)
- auto: uses new if available, otherwise fallback
- new: use redis DUMP and RESTORE commands (faster)
- classic: migrates via multiple type-specific commands
+ --pattern PATTERN Only transfer matching keys (default *)
+ See http://redis.io/commands/keys for more info.
--[no-]pipeline Use redis pipeline where available (default true)
+ -r, --require FILENAME Require a script; useful for loading third-party
+ implementations of key-emitter or copy strategies.
+ Relative paths *must* begin with `../' or `./'.
-d, --[no-]debug Write debug output (default false)
-t, --[no-]trace Enable backtrace on failure (default false)
-f, --[no-]fail-fast Abort on first failure (default false)
--[no-]verify [PERCENT] Verify percentage of transfers -- VERY SLOW (default 0)
--[no-]prompt Prompt for confirmation (default true)
@@ -42,20 +42,36 @@
```
## Example:
```
-$ redis-copy --fail-fast --yes old.redis.host/9 new.redis.host:6380/3
+$ redis-copy --no-prompt old.redis.host/9 new.redis.host:6380/3
Source: redis://old.redis.host:6379/9
Destination: redis://new.redis.host:6380/3 (empty)
-Key Emitter: Default
-Strategy: New
+Key Emitter: Scan
+Strategy: DumpRestore
PROGRESS {:success=>1000, :attempt=>1000}
PROGRESS {:success=>2000, :attempt=>2000}
PROGRESS {:success=>3000, :attempt=>3000}
PROGRESS {:success=>4000, :attempt=>4000}
DONE: {:success=>4246, :attempt=>4246}
```
+
+## Extensibility:
+
+`RedisCopy` uses the [implements][] gem to define interfaces for key-emitter
+and copy strategies, so implementations can be supplied by third-parties,
+secondary gems, or even a local script; the interface shared examples are even
+available on your load-path so you can ensure your implementation adheres to
+the interface.
+
+See the existing implementations and their specs for examples, and use the
+`--require` command-line flag to load up your own. Since `implements` treats
+last-loaded implementations as inherently better, `RedisCopy` will automatically
+pick up your implementation and attempt to use it before the bundled
+implementations.
+
+[implements]: https://rubygems.org/gems/implements
## Contributing
1. Fork it
2. Create your feature branch (`git checkout -b my-new-feature`)