作者: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命令开始说起

Memcached源码分析之从SET命令开始说起的更多相关文章

  1. memcached源码分析三-libevent与命令解析

    转载请注明出处https://www.cnblogs.com/yang-zd/p/11352833.html,谢谢合作! 前面已经分析了memcached中的slabs内存管理及缓存对象如何利用ite ...

  2. Memcached源码分析

    作者:Calix,转载请注明出处:http://calixwu.com 最近研究了一下memcached的源码,在这里系统总结了一下笔记和理解,写了几 篇源码分析和大家分享,整个系列分为“结构篇”和“ ...

  3. Memcached源码分析之请求处理(状态机)

    作者:Calix 一)上文 在上一篇线程模型的分析中,我们知道,worker线程和主线程都调用了同一个函数,conn_new进行事件监听,并返回conn结构体对象.最终有事件到达时,调用同一个函数ev ...

  4. Memcached源码分析之内存管理

    先再说明一下,我本次分析的memcached版本是1.4.20,有些旧的版本关于内存管理的机制和数据结构与1.4.20有一定的差异(本文中会提到). 一)模型分析在开始解剖memcached关于内存管 ...

  5. memcached源码分析-----item过期失效处理以及LRU爬虫

    memcached源码分析-----item过期失效处理以及LRU爬虫,memcached-----item 转载请注明出处:http://blog.csdn.net/luotuo44/article ...

  6. Memcached源码分析之线程模型

    作者:Calix 一)模型分析 memcached到底是如何处理我们的网络连接的? memcached通过epoll(使用libevent,下面具体再讲)实现异步的服务器,但仍然使用多线程,主要有两种 ...

  7. Memcached源码分析——process_command函数解析

    以下为个人笔记 /** * process_command 在memcached中是用来处理用户发送的命令的, * 包括get set,add,delete,replace,stats,flush_a ...

  8. Memcached源码分析——内存管理

    注:这篇内容极其混乱 推荐学习这篇博客.博客的地址:http://kenby.iteye.com/blog/1423989 基本元素item item是Memcached中记录存储的基本单元,用户向m ...

  9. memcached源码分析一-slab

    Slab作为一种内存管理方案,其作用主要有以下2点: a) 避免频繁的内存分配释放造成的内存碎片 b) 减少内存分配操作产生的性能开销 Linux内核数据结构中也有slab的设计,Linux提供了一套 ...

随机推荐

  1. 添加以及删除className

    <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...

  2. HDU 4612 Warm up(双连通分量缩点+求树的直径)

    思路:强连通分量缩点,建立一颗新的树,然后求树的最长直径,然后加上一条边能够去掉的桥数,就是直径的长度. 树的直径长度的求法:两次bfs可以求,第一次随便找一个点u,然后进行bfs搜到的最后一个点v, ...

  3. Gym 100518E Embedding Caterpillars

    构造+DFS 很容易的可以构造两个,最后一个不会构造的话  DFS一下就可以了 #include<iostream> #include<string> #include< ...

  4. 关于python的可变和不可变对象

    在python中所有都是对象,在python中只有list和dict是可变对象,其他都是不可变对象. 具体参照:http://www.cnblogs.com/lovemo1314/archive/20 ...

  5. hprof网络连接

    demo/jvmti/hprof/tt/manual.htmlnc -l -k 12321 java -agentpath:./demo/jvmti/hprof/lib/libhprof.so=net ...

  6. 1.2 selenium IDE录制脚本

    1.打开Firefox浏览器中 selenium IDE

  7. The Wall (medium)

    The Wall (medium) Heidi the Cow is aghast: cracks in the northern Wall? Zombies gathering outside, f ...

  8. Android-----View绘制流程以及invalidate()等相关方法分析 .

    引自:http://blog.csdn.net/qinjuning/article/details/7110211 前言: 本文是我读<Android内核剖析>第13章----View工作 ...

  9. src和href的区别

    <html><!--头部标签--><!--src和href的区别src:引用,该资源是页面不可缺少的一部分,如(img标签 video标签 radio标签);href:引 ...

  10. BackTrack 5 R3 Metasploit更新方法及msfupdae,msconsole出错解决办法

    更新Metasploit最新版本: #cd /opt/metasploit/ #rm -rf msf3 #git clone --depth=1 git://github.com/rapid7/met ...