目录
更多技术交流:https://github.com/singgel
源码地址:http://git.snowballfinance.com/hekuangsheng/redis-replicator
技术难点一:
java伪装的slave从master获取的数据是redis protocol下的二进制数据,分为
1.RDB数据
2.PSYNC增量数据
Jedis单点有socket的预留接口方法sendCommand,问题,JedisCluster没有这个接口
解决:
1.将二进制数据直接用过CRC16获取到slot
2.根据slot对应的node
3.根据node在获取到Jedis的单点Client
以上同时要兼顾到整个cluster的连接池,不能反复的去创建connection
技术难点二:
在做压测的时候,1WOPS时出现slave,只接收了一部分数据,然后掉线
1.java的slave在dump到本地之后的数据,even处理阻塞
2.master的slave的alive时间设置太短
解决:
replicator参数里面有一个选线(Replicator)r.getConfiguration().setDiscardRdbEvent(true);
设置后rdb文件的解析过程将被忽略,更新offset标志位拉取同步最新的command