前一阵子发现我们一个业务服务器的redis内存使用超过了服务器总内存的50%,当触发bgsave的时候,会报错,提示 WARNING overcommit_memory is set to 0! … ,然后所有redis的写操作都会失败,这个问题redis官方FAQ中有解决方案,linux下,进行如下操作, ec
前一阵子发现我们一个业务服务器的redis内存使用超过了服务器总内存的50%,当触发bgsave的时候,会报错,提示WARNING overcommit_memory is set to 0! ...
,然后所有redis的写操作都会失败,这个问题redis官方FAQ中有解决方案,linux下,进行如下操作,
<code>echo 1 > /proc/sys/vm/overcommit_memory</code>
具体可以看官方FAQ,http:/来4源gaodaimacom搞#代%码*网/redis.io/topics/faq
解决了bgsave的问题之后,我们决定迁移一部分数据出去,分离一些数据到其他的redis实例中,下边记录下迁移过程。两种方案,一种是拷贝rdb文件或者配置一个从redis同步,但是这样所有数据都迁移了,还得做其他处理,所以放弃这个方案。另外一个方案就是写一个迁移脚本,只迁移部分想要迁移的数据。
这里直接贴出来
#!/bin/bash#redis 源ipsrc_ip=192.168.0.10#redis 源portsrc_port=6379#redis 目的ipdest_ip=192.168.0.11#redis 目的portdest_port=6379#要迁移的key前缀key_prefix=com.example.testi=1redis-cli -h $src_ip -p $src_port keys "${key_prefix}*" | while read keydo redis-cli -h $dest_ip -p $dest_port del $key redis-cli -h $src_ip -p $src_port --raw dump $key | perl -pe 'chomp if eof' | redis-cli -h $dest_ip -p $dest_port -x restore $key 0 echo "$i migrate key $key" ((i++))done
参考资料:
1、http://redis.io/commands/DUMP
2、http://stackoverflow.com/questions/16127682/how-to-use-redis-dump-and-restore-offline
原文地址:迁移部分redis数据到其他redis实例, 感谢原作者分享。