由于某种原因,需要把A环境的某个db的key同步到B环境,同步规则如下:
1、如果目标端不存在这个key,则进行从A导入到B环境。
2、如果目标端已存在同名的key,则将对应的key记录到文件。
PS: 相关IP等 已脱敏处理。
#!/bin/bash src_ip=192.168.1.1 src_port=6379 src_db=1 dest_ip=192.168.1.2 dest_port=6379 dest_db=1 redis-cli -h $src_ip -p $src_port -n $src_db keys * > ${src_ip}_${src_port}_db1_keys.txt for loop in `cat ${src_ip}_${src_port}_db1_keys.txt` do check_exists=$(redis-cli -h $dest_ip -p $dest_port -n $dest_db EXISTS $loop) if [[ $check_exists -eq 1 ]];then echo $loop >> ${src_ip}_${src_port}_db1_exists_keys.txt continue else redis-cli -h $src_ip -p $src_port -n $src_db --raw dump $loop | perl -pe 'chomp if eof' | redis-cli -h $dest_ip -p $dest_port -n $dest_db -x restore $loop 0 check_exists=$(redis-cli -h $dest_ip -p $dest_port -n $dest_db EXISTS $loop) if [[ $check_exists -eq 1 ]];then echo "success insert $loop from $src_ip:$src_port to $dest_ip:$dest_port" >> ok_insert_from_${src_ip}_${src_port}.log else echo "faild insert $loop from $src_ip:$src_port to $dest_ip:$dest_port" >> faild_insert_from_${src_ip}_${src_port}.log fi fi done