memcached&redis等分布式缓存的实现原理

memcached&redis等分布式缓存的实现原理

12月9日,河狸家资深架构师陈科老师,在【DBA+社群】中间件用户组进行了一次主题为“ & redis 等分布式缓存的实现原理”的线上分享。小编特别整理出其中精华内容,供大家学习交流。同时,也非常感谢陈科老师对DBA+社群给予的大力支持。

嘉宾简介

陈科

演讲实录

&redis是现在比较常见的缓存软件。我们今天对它进行一番剖析。这两个软件麻雀虽小,五脏俱全,对他们进行分析也有助于我们学习如何阅读c程序,以及如何进行开源软件的分析工作。

针对这样的服务器软件,我对它分析一般分为几个步骤:

服务器的模型

和redis都采用了事件机制的模型,比如在linux下,都是封装了epoll的实现。采用了的解决方案,而redis为了考虑性能,则直接封装了epoll。

另外redis hash原理,在后端的工作采用了线程池的模型,线程和工作进程进行通信采用了pipe管道的模式。

而redis则是把工作流程拆分成了多个步骤,然后交由epoll异步来完成,这样让一个线程尽量利用了cpu。所以memcached&redis等分布式缓存的实现原理,它是单线程的模式。

请求的协议

关于请求协议redis hash原理,相对都比较简单,和redis都实现了文本协议,比如的格式为:

rn

redis hash原理

redis的文本协议分为了两种:单行和多行。

例如,如果想要批量set,格式为:“*3rn$3rnSETrn$3rfoorn$3rbarrn”。*开头代表了类型。

另外,也支持的二进制协议。

内存管理机制

在后端工作内容上,相对比较简单,只是一个内存存放的过程,至于内存管理的方式,我们后面再介绍。redis则相对比较复杂,它不只是一个缓存,还实现一些服务端的数据结构。比如list,map,set等。

在内存管理的方式上,采用了预分配的方式,slab机制可以做到内存复用,减少碎片的产生。当然缺点就是会造成内存的浪费。

这张图说明了的内存管理机制。

顺便补充一下和redis的服务器模型图:

redis的内存分配相对简单,直接利用了:

redis hash原理

由于和free这样的机制会造成内存碎片,所以很多人会替换成这样的机制来替换。

还有类似这样的算法。这个分配器可以在编译的时候自己选择。

我之前自己测试过时碎片率是最低的为1.01,为1.02,而libc的分配器碎片率为1.31。大家也可以自己去测试下看看。

很多人把在使用redis和的选型时,经常会不知道使用哪一个。其实很多场景只需要考虑防止数据库被击穿。其实就够用了。而且客户端hash做分库也没什么大问题。

这样的客户端软件也封装了连接池,序列化和反序列化的工作也都已经做了,相对操心少一些。

假如需要做一些持久化memcached&redis等分布式缓存的实现原理,以及内存计算的工作,可以使用redis,这样就需要考虑一些HA和分库的解决方案。

其实一个redis实例,平常支撑上万的TPS是没什么大问题的,基本上世面上很多小公司根本没那么大的量。短期内,采用/slave这样的机制。来支撑redis hash原理,并且做读写分离就够用了。至于官方的集群模式,短期内我个人还是不太建议采用。还不如自己做一些分区,例如结合来做一套这样的方案。

另外,redis做一些定制,用来做一些内存计算还是不错的选择。例如,类似uber/滴滴,这样的公司。他们的之前都是基于来实现的。

可以做位置的索引。但是本身这块是一个针对多边形的算法实现,只是其中一部分,算法相对复杂,还要考虑持久化。所以性能相对差一些。需要按照全国来根据田字格划分区域来分库。

有人基于redis开发了的实现。每秒支撑7-8000的TPS没问题。而且是单个节点。所以类似的需求大家有兴趣也可以基于redis定制开发玩玩。

再次感谢河狸家资深架构师陈科老师,对DBA+社群活动给予的大力支持!

“DBA+社群”将陆续在各大城市群进行线上专题分享活动,以后每周一、周三晚上为【DBA+专业群】的固定时间,每周二、周四晚上为【DBA+各城市群】的固定时间,每周五晚上为【DAMS架构师精英群】的固定时间,欢迎大家积极加入我们。无论是内容还是形式,有好的建议我们都会积极采纳。

公告:
1. 本站所有资源来源于用户上传和网络,如有侵权请联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系站长处理!
6. 本站不售卖代码,资源标价只是站长收集整理的辛苦费!如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
7. 站长QQ号码 2205675299

资源库 - 资源分享下载网 » memcached&redis等分布式缓存的实现原理

常见问题FAQ

关于资源售价和售后服务的说明?
本站所有资源的标价均为本站收集资源的辛苦费,不代表资源本身的价值。软件是高智慧高价值的商品,不可能是白菜价。本站资源标价只是赞助费用,收取的赞助费仅用来维持本站的日常运营!毕竟收集整理资料需要投入云计算资源和站长大量的精力。
代码有没有售后服务和技术支持?
由于代码的运行具有不可预见性,本站不保证代码完整可运行,不提供技术支持和售后服务。 本站原创代码都是站长自己开发的,可以有偿提供技术支持服务。 网站里标明【亲测】的代码都是站长亲测过的,其他的代码由于精力有限,没有一一测试,不能保证代码就一定能够使用,更没有技术支持服务,下载前请自行斟酌。
有没有搭建服务?
由于搭建服务比较费时费力,所以本站除了原创代码外均不提供搭建服务。本站分享代码纯属兴趣爱好,不以盈利为目的,请勿咨询有没有搭建服务,谢谢理解。
链接地址失效了怎么办?
请带上资源链接地址联系客服,工作时间内我们看到后将第一时间回复。
关于解压密码
本站资源一般都没有加密,如果发现需要解压密码的,那么就输入 hao.35dc.com 试试。

发表评论

资源库,由老程序员细心甄别、精心筛选,只为提供优质的源码资源

关于我们 联系我们