Redsmin / rdd

redis database dumper

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

---------------------------------------------
--- redis database dumper --- rdd --- 0.3 ---
---------------------------------------------

© 2012 noferi mickaël (r043v/dph)  ...  noferov@gmail.com  ...  https://github.com/r043v/rdd/

This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.
  http://creativecommons.org/licenses/by-nc-sa/3.0/

-------------------------------------

it's a beta software, use it at your own risk !

it does not replace your own rdb file saving, do not rely only on this sofware for precious data !

*** DO NOT USE THIS SOFTWARE IF YOUR KEY NAMES ARE BINARY SAFE ***

-------------------------------------

this tool can be used to dump a redis database, work on dump and put dump into redis

this tool not use .rdb file ! i made my own file format, .rdd

-------------------------------------

changelog

0.3	add key rename, also fix a small memory leak
0.2	add ttl support, save ttl with end unix timestamp value, will auto filter expired keys before output them anywhere.
0.1	memory leak fix
0.1a	initial release

-------------------------------------

know bugs ..

not any, but i not made serious test :)
there are no check test .. so, a bad dump file can maybe crash

-------------------------------------

how to compile ..

you need hiredis library,
single file mean single line : gcc -std=c99 rdd.c ./libhiredis.a -o rdd

-------------------------------------

usage ..

all arguments are optionals

./rdd [inputs] -f [filters] -m [match filters] -mv [find_text replace_text] -o outputType

inputs can be redis keys command filter, or, .rdd files, all specified inputs will be merged
filters can only be wilcards keys name filters : "*cache*" "*user:???:*", put any filter as you need
match filters are wilcards too, it specifie keys to keep, you can put multiple match filters

no inputs mean "*" redis keys command filter will be used, so, get all keys

-mv argument

it's for "move", keys rename
follow mv with pairs of replace text in keys name

-mv "my_prefix:" "my_new_prefix:"

you can done some replace at the same time

-mv "my_prefix:" "my_new_prefix:" ":user:old_name" ":user:new_name" ":user:" ":web_site_users:"

match and replace are not wildcard, but plain text

output argument

-o "file.rdd" save keys set into specified .rdd file
-o "insert" will write all keys into redis (and before insert delete them)
-o "delete", delete all keys from redis

-v will increase verbose mode, can be 0, 1 or 2
verbose == 1 will print output set keys name
verbose == 2 will print output set keys name and all keys data
no output (-o) specified will made verbose++;

-s "127.0.0.1" specifie redis database ip
-p "6379" specifie redis port
-a "password" specifie redis auth password
-d "#database" specifie database number to use

also, default type for no flag input are "input", can also be set with -i

-------------------------------------

exemple ..

./rdd
will print all keys name

./rdd "*user*"
will print all keys where name match "*user*"

./rdd -o "save.rdd"
save all keys into "save.rdd"

./rdd "*user*" -o "save.rdd"
will save all keys where name match "*user*" into "save.rdd" file

./rdd "myprefix:*" -f "*cache*" -o "mydump.rdd"
get all "myprefix:*" redis keys, remove "*cache*" keys and save result as "mydump.rdd"

./rdd "mydump.rdd" -m "*:user:*" -o "users.rdd"
gat all keys from "mydump.rdd" file, keep only keys name who match "*:user:*" and save result as "users.rdd"

./rdd "mydump.rdd" "*comment*" "*article*" -f "*cache*" -m "myprefix*" -o "mydump.rdd"
merge "mydump.rdd" keys with redis keys who match "*comment*" and "*article*", remove all keys who match "*cache*", keep only keys match "myprefix*" and save the result as "mydump.rdd"


exemple, move some keys from one redis instance to another one

// save all keys of your choice
./rdd "myprefix:*" -o "keys.rdd" -s "ip of redis instance 1" -p "port of redis instance 1"

// delete all keys from source redis
./rdd "keys.rdd" -o delete -s "ip of redis instance 1" -p "port of redis instance 1"

// filter keys from dump if need, here we delete "cache" temp keys
./rdd "keys.rdd" -f "*cache*" -o "keys.rdd"

// now save dump into redis instance 2
./rdd "keys.rdd" -o insert -s "ip of redis instance 2" -p "port of redis instance 2"

-------------------------------------

About

redis database dumper