todo
这个是链接,讲的很详细,我对照了项目中的代码和源码跟了一遍。
http://swinepig.readthedocs.org/zh_CN/latest/pragram/ShardedJedisPool.html
后续不上过程摘要
搞清楚以下几个问题:
1.一致性hash的代码实现,完成redis集群的处理
见makeObject方法处理过程
2.源码中有linkedmap treemap的使用场景
方法中使用可treemap来存储server的节点,保证可map对象的key值是有序的,key值是对shard- node 机器位置,机器个数字符转的hash,值为server机器的信息
目前是为了判断一致性hash时使用,即:拿到一个请求,hash其key值,选取大于等于某个节点的那个节点。
3.初始化被调用的过程,包括初始化,池化,调用的过程
List<JedisShardInfo> list
ShardedJedisPool pool = new shardedJedisPool(new Config(),list);
config为池的配置信息,
list是server机器服务list;这是创建集群池的过程
调用大致过程为:
ShardedJedis jedis = pool.getResource();
getResource->borrowObject->makeObject
其中makeObject方法里有一致性hash算法把server分散开来
Jedis jedis2=jedis.getShard(key);
最终拿到对象还是通过Jedis对象和redis的server端通信
getResouce的过程
4.spring配置的读取,jedis配置的读取和参数细节做个笔记
spring的配置文件加载类,ClassPathResource类
例子:
Resource resource= new ClassPathResource("xxx.xml");
BeanFactory ctx = new XmlBeanFactory(resource);
String POOL_CONFIG ="jedisPoolConfig";
JedisPoolConfig config = (JedisPoolConfig)xtx.getBean(POOL_CONFIG);
todo链接kafka集群的搭建和使用