-
-
Save ZwodahS/2263e351b8c29181c642 to your computer and use it in GitHub Desktop.
#!/bin/bash | |
# source http://stackoverflow.com/questions/23222616/copy-all-keys-from-one-db-to-another-in-redis | |
#set connection data accordingly | |
source_host=localhost | |
source_port=6379 | |
source_db=1 | |
target_host=localhost | |
target_port=6379 | |
target_db=2 | |
#copy all keys without preserving ttl! | |
redis-cli -h $source_host -p $source_port -n $source_db 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 |
If you get the below error over Mac, try install gnu head and change head to ghead in the above script.
head: illegal byte count -- -1
If you get the below error over Mac, try install gnu head and change head to ghead in the above script.
head: illegal byte count -- -1
@yogeshsr It's better to replace head -c -1 with perl for Mac
perl -pe 'chomp if eof'
unfortunately doesn't copy any ttl values across; so your new keys may last forever?
Sorry i'm not using ttl keys for now
`#!/bin/bash
source_host=10.128.0.157
source_port=6393
target_host=prod-experienceservice-elasticache.l15s7f.ng.0001.usw2.cache.amazonaws.com
target_port=6379
function copy_key {
key="$1"
echo "Copying $key"
redis-cli --raw -h $source_host -p $source_port DUMP "$key" | head -c-1 | redis-cli -x -h $target_host -p $target_port RESTORE "$key" 0
if [ $? -ne 0 ]; then
echo "Error copying key $key"
# Handle error as needed
fi
}
export -f copy_key
export source_host
export source_port
export target_host
export target_port
redis-cli -h $source_host -p
This works much better and distributes the load to 16 threads
That was what I needed!