比Redis还快5倍的中间件,为啥这么快?|赠书
今日开奖:元旦快乐!888个新年红包等你拿!
作者:羽洵
来源:https://my.oschina.net/yunqi/
今天给大家介绍的是KeyDB,KeyDB项目是从redis fork出来的分支。众所周知redis是一个单线程的kv内存存储系统,而KeyDB在100%兼容redis API的情况下将redis改造成多线程。
线程模型
处理统计 客户端链接管理 db数据的resize和reshard 处理aof replication主备同步 cluster模式下的任务
链接管理
clients_pending_write:线程专属的链表,维护同步给客户链接发送数据的队列 clients_pending_asyncwrite:线程专属的链表,维护异步给客户链接发送数据的队列 clients_to_close:全局链表,维护需要异步关闭的客户链接
int fdCmdWrite; //写管道
int fdCmdRead; //读管道
锁机制
struct ticket
{
uint16_t m_active; //解锁+1
uint16_t m_avail; //加锁+1
};
struct fastlock
{
volatile struct ticket m_ticket;
volatile int m_pidOwner; //当前解锁的线程id
volatile int m_depth; //当前线程重复加锁的次数
};
try_lock:一次获取失败,直接返回 lock:忙等,每1024 * 1024次忙等后使用sched_yield 主动交出cpu,挪到cpu的任务末尾等待执行。
Active-Replica
每个replica有个uuid标志,用来去除环形复制 新增加rreplay API,将增量命令打包成rreplay命令,带上本地的uuid key,value加上时间戳版本号,作为冲突校验,如果本地有相同的key且时间戳版本号大于同步过来的数据,新写入失败。采用当前时间戳向左移20位,再加上后44位自增的方式来获取key的时间戳版本号。
福利时间
中间件技术一直是互联网技术架构中非常重要的一个环节,所以,也是程序员的必备技能之一,为了助力大家更好的学习中间件技术,今天「民工哥技术之路」联合「机械工业出版社」给大家带来5本《分布式中间件技术实战》技术书籍福利,感谢机械工业出版社的大力赞助与支持!
《分布式中间件技术实战(Java版)》站在初学者的角度,介绍了几款比较流行的分布式中间件,带领读者从零开始一步一个脚印地学习Java企业级应用开发。书中在讲解必要的理论知识和应用场景后都给出了实际项目案例,可以提高读者的开发水平和项目实战能力。
送书规则
1、留言说说你在学习中间件技术中遇到的坑、经验,或你在解决处理中间件技术故障过程中有何独特的思路,精选留言点赞前4各送出一本。
2、精选留言中抽取1名留言最走心、最精彩的读者送出一本。
3、活动限公众号读者参与,截止时间2020年1月11号20:00。获得赠书资格的读者需于8小时内联系小编,发送详细收货地址,逾期视为自动放弃。
关注「 民工哥技术之路」微信公众号对话框回复关键字:1024 可以获取一份最新整理的 2TB 技术干货:包括系统运维、数据库、redis、MogoDB、电子书、Java基础课程、Java实战项目、架构师综合教程、架构师实战项目、大数据、Docker容器、ELK Stack、机器学习、BAT面试精讲视频等。
☆ END ☆
精彩文章推荐:
点击【阅读原文】发现更多精彩
觉得好看,请点这里↓↓↓