当前位置: 首页 > redis, 分布式系统, 缓存系统 > 正文

jedis源码学习

关键字:
1 星2 星3 星4 星5 星 (暂无评分)
Loading ... Loading ...
baidu_share

最近因为工作的原因,对jedis源码熟悉了一下。

1.jedis对底层协议封装,建立socket连接,数据发送和接收。抽象出client。
jedis-client
2.面向用户使用的jedis。
jedis
3.提供发布订阅功能。相关类为:BinaryJedisPubSub,JedisPubSub

4.提供事务功能。相关类为:Queable,BinaryTransaction,Transaction,TransactionBlock。

5.pipeline功能。相关类为:Queable,Pipeline,PipelineBlock。

6.实现分布式功能的ShardedJedis。
ShardedJedis
主要使用MurmurHash算法将key哈希到各个客户端。
使用对象池技术来保存ShardedJedis,以支持高并发。

在redis实际应用中,我们分有很多片,在批量查询中,首先要将查询key进行合并,将key对应在同一个分片保存到map,然后对map遍历,对同一个jedis中key使用pipeline技术来提高响应速度。也可以使用多线程技术,同时运行多个jedis的pipeline来加快响应速度。

redis集群由64分片扩容到128分片后发现响应速度明显变慢,比以前慢了1倍多。
解决方法:过多分片,导致查询次数增多(可能),发现redis连接数很多。redis分片容量较少,4g左右。经过测试,redis单个实例分片在15g左右比较合适。根据业务进行垂直分片,增加集群数量,而不是在一个集群中增加机器数量。具体业务接入对应的集群后,响应速度比以前快了2倍左右,连接数很少。增加集群数量,也增加了维护工作量,各有得失吧。

ShardedJedisPool嵌套类ShardedJedisFactory继承BasePoolableObjectFactory,销毁对象是会把所有的jedis都销毁掉。假如分片A有超时现象,对象池将会returnBrokenResourceObject,也就是将ShardedJedis里面所有客户端都销毁,在重建。这浪费了很多资源,也容易造成集群处理能力下降。修改jedis源码,那个分片jedis有问题,销毁对应的jedis。

本文固定链接: http://www.chepoo.com/jedis-source-code-study.html | IT技术精华网

【上一篇】
【下一篇】

jedis源码学习:等您坐沙发呢!

发表评论