Instade of move Chcę skopiować wszystkie moje klucze z określonego db do innego. Czy jest to możliwe w Redis, jeśli tak, to w jaki sposób?Skopiuj wszystkie klucze z jednego db na inny w redis
Odpowiedz
Jeśli nie można używać MIGRATE COPY z powodu swojej wersji Redis może chcesz skopiować każdy klawisz osobno, która trwa dłużej, ale nie wymaga logowania się do samych maszyn i umożliwia przenoszenie danych z jednej bazy danych do drugiej. Oto jak skopiować wszystkie klucze z jednej bazy danych do innego (ale bez zachowywania TTLS)
#set connection data accordingly
source_host=localhost
source_port=6379
source_db=0
target_host=localhost
target_port=6379
target_db=1
#copy all keys without preserving ttl!
redis-cli keys \* | while read key; do echo "Copying $key"; redis-cli --raw -h $source_host -p $source_port -n $source_db DUMP "$key" | head -c -1|redis-cli -x -h $target_host -p $target_port -n $target_db RESTORE "$key" 0; done
Keys nie będą overwriten, za to usuń klucz przed skopiowaniem lub opróżnić całej bazy danych przed uruchomieniem.
Nie bezpośrednio. Proponuję użyć zawsze wygodnego pakietu redis-rdb-tools (od Sripathi Krishnan), aby wyodrębnić dane z normalnego zrzutu RDB i ponownie wprowadzić go do innej instancji.
Oprócz odpowiedzi Didier za: jeśli chcesz zrobić to przez Internet i przyrostowo, możesz użyć kombinacji ['SCAN'] (http://redis.io/commands/scan) i [' MIGRATE'] (http://redis.io/commands/migrate) –
Spróbuj użyć zrzutu najpierw zrzucić wszystkie klucze, a następnie przywrócić taką samą
Próbuję to ale nie można przywrócić w wymaganej db.Its pokazują błąd - nazwa klucza Target jest zajęty. – Subo
Może to być spowodowane tym, że nazwa klucza już istnieje w docelowej bazie danych. Spróbuj utworzyć nowy db, a następnie przywróć zrzucone klucze. Upewnij się także, że db jest poprawnie przełączony i nie jest poprzedni podczas przywracania, co może powodować konflikt. –
O ile mi zrozumieć, trzeba skopiować klucze od określonego DB (na przykład 5) określonego DB powiedzieć 10. Jeśli tak jest w istocie można użyć Redis wywrotka bazie (https://github.com/r043v/rdd). Chociaż zgodnie z dokumentacją ma przełącznik (-d), aby wybrać bazę danych do działania, ale nie działa dla mnie, więc to, co zrobiłem
1.) Edytuj plik rdd.c i poszukaj int main (int argc, char argv) funkcja
2.) Zmień DB jak na swoje wymagania
3.) sporządza src przez ** dokonać
4.) Dump wszystkie klucze używając ./rdd -o "save.rdd"
5.) Ponownie edytuj plik rdd.c i zmień DB
6.) Zrób ponownie
7.) importu za pomocą ./rdd "save.rdd" -o wstawić -s "IP" -p "port"
wiem, że to jest stary, ale dla tych z was przychodzi tu tworzyć Google :
Właśnie opublikowałem narzędzie interfejsu wiersza poleceń do npm i github, które pozwala kopiować klucze, które pasują do danego wzoru (nawet *) z jednej bazy danych Redis do drugiej.
można znaleźć narzędzia tutaj:
redis-cli -a $source_password -p $source_port -h $source_ip keys /*| while read key;
do echo "Copying $key";
redis-cli --raw -a $source_password -h $source_ip -p $source_port -n $dbname DUMP "$key"| head -c -1| redis-cli -x -a $destination_password -h $destination_IP -p $destination_port RESTORE "$key" 0;
kopiuje wszystkie klucze z numerem 0 do bazy danych bazy danych numer 1 na localhost.
redis-cli --scan | xargs redis-cli migrate localhost 6379 '' 1 0 copy keys
Jeśli używasz tego samego serwera/portu dostaniesz błąd przekroczenia limitu czasu, ale klawisze wydają się powodzeniem skopiować tak.GitHub Redis issue #1903
Jeśli migracji klucze wewnątrz tego samego silnika Redis, wówczas można użyć wewnętrznego MOVE polecenia dla tego (potokowego dla większej prędkości):
#!/bin/bash
#set connection data accordingly
source_host=localhost
source_port=6379
source_db=4
target_db=0
total=$(redis-cli -n 4 keys \* | sed 's/^/MOVE /g' | sed 's/$/ '$target_db'/g' | wc -c)
#copy all keys without preserving ttl!
time redis-cli -h $source_host -p $source_port -n $source_db keys \* | \
sed 's/^/MOVE /g' | sed 's/$/ 0/g' | \
pv -s $total | \
redis-cli -h $source_host -p $source_port -n $source_db >/dev/null
Dla wersji redis> 2.6 można użyć polecenia migrate 'klucze redis-cli \ * | podczas czytania klucza; wykonaj echo "Copying key"; abc = "MIGRATE localhost 1234 $ key 0 5000 COPY"; redis-cli "MIGRATE localhost 1234 $ key 0 5000 COPY"; done' –
Stworzyłem [istotę, która obsługuje również uwierzytelnianie i TTL] (https://gist.github.com/nicStuff/ee7feb8eed00174a46db42812545b403). @uditmittal to wspaniałe, w każdym razie rozważ, że MIGRATE nie obsługuje uwierzytelniania nawet w wersji 3.2. – reallynice