redis 迁移 codis
最近需要将一个 非常大的 redis 迁移到 codis遇到了一些问题
首先说一下 redis 导数据的一些基本方法
- 停写 bgsave, 然后 拷贝 dump文件 
 远古时期做法,需要停机
- 直接将 新的redis 作为老的redis的 slave 让她自己同步。 - 现在主流,快, 但是对大内存的redis 不友好。 - 流程就是先 子进程bgsave, 然后传递全量数据, 父进程缓冲增量数据(缓冲区大小需要配置), 子进程全量数据传完后, 传送增量数据。 - 全量数据传递过程中需要buffer 会占用内存空间。 - 版本 < 2.8.18 bgsave 由于要写文件,会让 磁盘io负载变高, 数据量大时会 会阻塞 write/fsync 系统调用,会让master 不可用。 - 版本 >= 2.8.18 可以不落地, 减小对 master 磁盘io 压力。 
- BGREWRITEAOF 然后自己自己解析aof 发送 - 其实原理同上,一样先bgsave, 在子进程将全量数据以 aof 格式写磁盘, 然后父进程存增量数据到缓冲区,(哪不是一个链表, 无限制), 全量写入到 磁盘后,追加增量数据。 
首先用codis官方的迁移工具 redis-port
他的原理是,2
不过实际测试发现, 如果数据量很大,则会造成 redis 缓冲区不足, 强制关闭 (p)sync 连接。 有修改的方法, 但是如果写入的量依然很大, 仍旧存在风险。
别的同步工具 也差不多这个原理。
需要注意的是, 不管用啥方法, 都应该在 slave 上面 执行。 避免影响 master。
由于我们的redis 非常大 30+G, 并且 写的量也很大,机器的内存不是瓶颈, 再加上 需要对数据做一些个性化修改, 所以 最终使用3, 然后用自己解析aof 发到 codis