作者:Calix

如果直接把memcached的源码从main函数开始说,恐怕会有点头大,所以这里以一句经典的“SET”命令简单地开个头,算是回忆一下memcached的作用,后面的结构篇中关于命令解析部分主要也是围绕着SET命令展开分析,相信把一句SET命令背后做的事情都搞清楚,那么memcached大部分源码都了解得七七八八了。

那么,回忆一下,set命令做了个什么事情?

无非就是把一个value set到某个key上面,保存在内存当中。

再细化一下:

1)memcached是一个缓存服务器,我们使用它的时候往往是通过一个客户端,例如php的memcached客户端,或者直接在linux终端通过telnet,无论哪种方式,首先的行为都是“建立连接”。(注,虽然memcached是一个分布式的缓存服务器,其实质分布算法在客户端实现,所以关于分布式逻辑不在本次源码分析范围内。)那么,memcached是怎样处理网络请求的?是多进程还是异步的方式?

2)当连接建立完成后,我们在发一个SET命令,例如在终端telnet成功后,敲下:”set name 0 0 3\r\n Tom\r\n”(这是memcached的set协议),那么memcached是怎么获取到这句命令和数据的,获取到之后怎么解析,以及交给哪些模块去执行的?

3)解析到set命令后,知道要保存一个k-v结构的数据到内存,那么它是怎么分配内存的?分配后怎么能保证下次我们取的时候很快能通过“key”来获取”value”?又是怎么在并发的情况下保证原子性和一致性?

带着上面的问题,我把对memcached源码分析结构篇分为了三个主要部分:

一)memcached源码分析之线程模型

二)memcached源码分析之请求处理(状态机)

三)memcached源码分析之内存管理

转载请注明:Calix » Memcached源码分析之从SET命令开始说起

最新文章

  1. linux tar命令的使用
  2. STSdb,最强纯C#开源NoSQL和虚拟文件系统 4.0 RC2 支持C/S架构
  3. UVA 1398 Meteor
  4. Delphi For Android 开发笔记 1 - 开发工具介绍
  5. Microsoft Office Excel 不能访问文件“XXXXXXXXXXXXX.xls”。 可能的原因有:
  6. GDB 进行调试 使用心得
  7. WCF - REST服务
  8. Java导入证书失败Keystore was tampered with, or password was incorrect
  9. phpcmsV9于基本介绍
  10. vue_ui使用
  11. CLOUD不审核修改物料
  12. java 中 System
  13. ASP.NET WebApi 基于OAuth2.0实现Token签名认证
  14. WOW.js和animate.css让页面滚动时显示动画
  15. pycharm如何新项目如何不默认创建虚拟环境(吐槽)
  16. 如何引用GitHub的静态资源文件 js css
  17. fengsuo
  18. python常用内置函数1
  19. jboss eap6.1(5)(ejb升级)
  20. ubuntu系统中添加DNS服务器地址后诡异消失的解决办法

热门文章

  1. 基础-session,cookie,jsp,EL,JSTL
  2. 学习笔记——单例模式Singleton
  3. HDU 2668 Daydream
  4. Apache 实现ProxyPass转发URL到Tomcat并实现http自动转https【转载】
  5. 如何让struts2和servlet的共存
  6. Mysql命令-以NULL做where条件过滤时应该写 IS NULL;
  7. POJ 3254 Corn Fields(状态压缩)
  8. PAT (Advanced Level) 1078. Hashing (25)
  9. pscs6
  10. TCP四次挥手