这里有一个背景,就是目前印尼机房的JIMDB版本依然是老版本,即是没有AP方式(即兼容redis协议的IP+TCP端口)直连支持的。所以接下来分享下Golang怎么同时集成JIMDB新版本和老版本。
图7
如上图7所示,当JIMDB新版本能支持AP方式接入时,只需要选择一个实现redis协议的golang三方库就可以了,我在本实现中使用的是redigo。同样采用了Redis连接池。
当使用JIMDB老版本时,JIMDB集群的路由规则是通过xml配置文件下发到客户端,由java客户端按配置文件解析,得到所有redis主分片信息,再基于特定的hash算法命令具体分片,进行数据读写的。
下面看下实现细节:
图8
如上图所示,首先通过ConfigPing带node和token参数,得到version,然后通过ConfigGet带参数version,node,token,得到配置文件xml。
图9
如上图,在得到xml的基础上,解析成嵌套对象,从对象中获取到writeGroups指定xml节点值,比如:redis.local:6379. 由于以上配置文件是只有一个写分片,所以只看到一个地址。如果是支持多个分片,就可以看到多个地址,多个地址采用hashArgo指定的hash算法进行数据寻址,定位redis分片。本实现目前只做了单分片地址的解析。
最后,用得到的Address:redis.local:6379, 采用AP方式一样RedisConnPool,进行数据储取。