`
aijuans
  • 浏览: 1566331 次
社区版块
存档分类
最新评论

memcached源码分析-----安装、调试以及如何阅读memcached源码

阅读更多

安装:

 

        安装memcached之前要先安装Libevent。现在假定Libevent安装在/usr/local/libevent目录了。

        因为memcached安装后不像Libevent那样,有一堆头文件和库文件。安装后的memcached不是用来编程而直接用来运行的。所以不需要在/usr/local目录下专门为memcached建立一个目录。直接把memcached安装到/usr/local即可。

        在Linux中解压memcached-1.4.21.tar.gz,然后进入解压后的目录。输入命令下面命令进行配置安装。

 

        $./configure --with-libevent=/usr/local/libevent

        $make

        $sudo make install

 

        memcached的默认安装目录就是/usr/local,如果想安装在自己的目录,那么可以configure的时候用--prefix=xxx指定一个目录。--with-libevent就是用来指明Libevent的安装目录的。

        如果安装目录是/usr/local那么现在可以memcached这个可执行程序了,直接在命令行输入memcached即可,并且此时可以使用命令$man memcached查询帮助手册。

        假如是安装在其他目录,比如/usr/local/memcached目录,那么还需要一些配置。首先要配置可执行文件的查找目录,需要修改PATH环境变量。在/etc/bash.bashrc文件最后添加:

        exportPATH=$PATH:/usr/local/memcached/bin

        此时,就可以在shell中能运行memcached命令了。但还不能使用man来查询memcached的帮助手册。因为该命令的帮助手册没有在man的查询目录上。在/usr/local/memcached/share/man/man1目录中,有一个memcached.1文件。把这个文件拷贝到/usr/local/share/man/man1目录下。此时就可以man 这个memcached了。

 

 

调试:

 

        如果已经安装了memcached,那么先使用$sudo make uninstall命令进行卸载。configure 配置和前面一样,不需要改变。然后输入下面命令生成debug版本的memcached。

        $make  CFLAGS="-g -O0"

        $sudo make install

        这样就行了。然后直接是shell里面输入$gdb memcached命令启动memcached。至于memcached的参数是在启动gdb之后,使用run命令的时候才输入的。如下图所示:

        

        要记得先设置断点,然后才使用r或者run命令。

 

 

启动命令:

 

        简单的启动命令如下,设置-l和-p分别用来设置ip和监听的端口。-vv是输出一些运行信息。

        $memcached  -l 192.168.1.112  -p 8888  -vv

 

 

和libevent的关系:

 

        memcached依赖于libevent。从memcached的编译就可以知道。阅读memcached的代码需要懂得libevent的基本使用,关于libevent的使用例子可以参考《Libevent使用例子,从简单到复杂》。当然阅读memcached源码并不需要阅读libevent源码作为基础,懂得libevent的基本使用即可。假如读者想阅读libevent的源代码,可以参考《libevent源码分析》系列文章。

 

和libevent源码阅读的难度比较:

 

        虽然memcached的代码量比libevent少很多,但阅读起来却比libevent难很多。主要原因有:memcached使用了大量的全局变量;各个模块之间的关联性很强;使用了大量的锁和很多线程。而libevent的各个模块独立得比较好,模块间关联很少,基本上是各个模块完成自己独立的功能,然后向外界提供使用接口。所以阅读memcached的代码更要耐心。另外,阅读memcached源码除了需要会用libevent外还需要懂得多线程、socket、管道等等东西的基本使用。当然如果看过《UNIX环境高级编程》那么就没有问题了。

 

 

如何阅读memcached源代码:

 

        1.找一篇概括性描述memcached的文章。了解memcached使用了哪些技术以及memcached内部的各个模块(比如内部有哈希表、slab内存分配器、LRU队列、半同步半异步等等)。一个日本人写的《memcached完全剖析》可以看一下,里面并没有涉及到代码只是简单介绍memcached。

        2.分模块阅读代码,可以单独阅读slabs.c文件、assoc.c文件、items.c文件。看完一个模块的基本功能后,再阅读另外一个模块的。记住,不要想一次就把整个模块完全看懂。memcached模块间关联太大的,不可能一次性看懂的。要经常回过头看之前看过的模块,特别是看到了一些相关联的东西(比如全局变量)。

        3.虽然分模块阅读会容易一些,但对于memcached来说还是有点难度。因为memcached模块之间的关联比较大,不像libevent分得那么开。关联一般是通过一些全局变量。但memcached使用了很多很多很多全局变量,所以阅读代码的时候要注意全局变量是否有static修饰符(如果有的话就心里暗喜吧)。另外,在阅读某一个模块的时候,要假设这些全局变量取默认值并且不会变,这样阅读起来会容易一点。相当部分的全局变量是结构体变量settings的成员变量。全局变量settings的很多成员都可以在启动memcached的时候通过参数设置,但阅读的时候就假定没有设置。全部成员都取默认值。settings_init函数是用来给全局变量settings的各个成员赋默认值的。每次阅读代码的时候建议都打开这个函数方便随时查看各个成员的默认值。

        4.memcached使用了大量的锁和多个线程(非worker线程),阅读时不要理会这些锁和线程。看到锁就跳过,假定没有锁是线程安全的。对于那些非worker线程,就假定没有这个线程。哈哈!

        5.有一些功能是要开启才有的,比如LRU爬虫功能。在阅读代码的时候就假设没有开启这个功能。这个功能一般是通过全局变量的值而决定开启还是不开启的。那么在看到这个全局变量时,就直接把其取为不开启的值。

        至于代码的阅读顺序,可以参考本系列博文的写作顺序。简单来说就是从简单到复杂、从单一的结构到总体。

 

延伸阅读

大型网站架构设计-垂直化搜索引擎

大型网站架构设计-lucene 分布式扩展

大型网站架构设计lucene 索引优化

大型网站架构设计-Lucene 的使用 高亮和中文分词

大型网站架构设计-Lucene 的使用

大型网站架构设计-Redis 高性能的key-value数据库

大型网站架构设计-HBase 简单操作API

1
2
分享到:
评论

相关推荐

    memcached源代码下载.rar

    总之,通过分析`memcached`的源代码,开发者不仅可以了解其核心机制,还能学习到分布式缓存的设计理念和实现技巧。同时,`EnyimMemcached`客户端库为.NET开发者提供了便捷的接口,便于在.NET应用中集成`memcached`...

    Memcached缓存技术资料源码

    本文将深入探讨Memcached的基本概念、工作原理、安装配置、使用方法以及源码分析。 **一、Memcached基本概念** 1. **缓存**: 缓存是一种存储技术,用于临时存储频繁访问的数据,减少对后端慢速存储(如数据库)的...

    memcached1.4.5源代码

    **memcached1.4.5源代码分析** `memcached`是一种高性能、分布式内存对象缓存系统,用于在Web应用程序中存储数据,以减少数据库负载。它的设计目标是减轻数据库的负担,通过缓存经常访问的数据来提高网络应用的响应...

    memcached配置

    6. **源码分析** 对于源码级别的理解,可以查看Memcached的C语言实现,了解其内存管理(slabs和items)、网络通信以及缓存策略等核心功能。源码学习有助于自定义扩展或调试问题。 7. **工具使用** 一些实用的...

    memcached启动错误解决

    如果使用的是源码编译安装的memcached,确保所有依赖项已安装,且编译配置正确。编译并安装过程如下: ```bash wget https://github.com/memcached/memcached/releases/download/x.x.x/memcached-x.x.x.tar.gz tar ...

    memcached之客户端memadmin安装

    **标题解析:** "memcached之客户端memadmin安装" 这个标题涉及到的是关于`memcached`的一...通过上述分析,我们可以构建一个全面的`memcached`客户端`memadmin`的安装和使用教程,帮助用户更好地理解和掌握这一工具。

    商业源码-编程源码-AlstraSoft E-Friends v4.21.zip

    通过深入分析这个源码,我们可以了解到构建类似系统的关键技术点。 1. **框架与语言选择**: AlstraSoft E-Friends v4.21很可能基于PHP语言开发,因为PHP在Web开发领域被广泛用于构建动态网站,尤其是社交网络平台...

    找到一个memcached分析文档

    描述中提到的“博文链接:https://1998a.iteye.com/blog/257813”是一个ITeye博客上的文章链接,虽然具体内容没有提供,但我们可以假设这篇文章可能是作者分享的关于Memcached的使用经验、优化技巧或者源码分析。...

    商业编程-源码-F-GuestBook 留言簿 v1.0.zip

    通过深入分析和学习《商业编程-源码-F-GuestBook 留言簿 v1.0》的源代码,开发者不仅可以掌握Web开发的基本技术,还能了解到商业项目中的实际开发流程和最佳实践。无论是对于个人技能提升还是团队协作,都将带来宝贵...

    memcached_functions_mysql

    **描述分析:** "memcache与mysql结合必备" 表明Memcached Functions for MySQL是实现这两个技术协同工作的一个关键组件。Memcache是一个内存对象缓存系统,用于存储和检索数据,而MySQL则是一种关系型数据库管理...

    c# asp.net memcached client 调用示例

    在本文中,我们将深入探讨如何在C# ASP.NET项目中使用Memcached客户端进行缓存操作。Memcached是一种高性能、分布式内存对象缓存系统,广泛应用于缓解数据库负载,提高Web应用程序的响应速度。以下是一个关于如何...

    Druid源码(apache-druid-0.21.1-src.tar.gz)

    Druid 的源码分析可以帮助我们深入了解其内部机制和设计思想,这对于开发人员优化性能、调试问题或扩展功能至关重要。 在 `apache-druid-0.21.1-src` 压缩包中,我们可以找到 Druid 的全部源代码,包括核心库、扩展...

    神级memcached源代码分析文档_1.4.0代码分析

    总结,通过深入分析Memcached的源代码,我们可以了解到其高效运行背后的设计思想和技术实现,这对于优化缓存性能、解决实际问题以及理解分布式系统有着极大的帮助。对于开发者而言,这是一份宝贵的参考资料,能...

    memcached_notes:添加了详细中文注释memcached源代码,使用的memcached版本为memcached-1.4.21

    通过对memcached-1.4.21源代码的深入分析,我们可以更好地理解其工作原理,这对于调试、优化和扩展Memcached都有着重要的指导意义。同时,中文注释的添加使得源码更易读,对于学习C语言和分布式缓存系统的开发者来说...

    JSP源码——tot-jsp-cms.zip

    《JSP源码分析——深度探索TOT-JSP-CMS系统》 JSP(JavaServer Pages)是一种基于Java技术的服务器端脚本语言,用于创建动态网页。TOT-JSP-CMS是一个使用JSP编写的网站内容管理系统,它为开发者提供了一个灵活、可...

    股票分析系统源码,基于python,tornado框架.zip

    股票分析系统源码是开发金融领域应用的重要工具,它能够帮助投资者、分析师和开发者通过编程方式获取、处理和分析股票市场数据。这个特定的源码是基于Python编程语言实现的,利用了Tornado框架,一个轻量级且高效的...

    商业编程-源码-Cool guestbook修正版.zip

    今天我们将深入探讨"商业编程-源码-Cool guestbook修正版",这个项目是一个经过改进的在线留言本应用,名为"Cool Guestbook"。我们将从以下几个方面来解析这个源码,以期从中获取宝贵的编程经验。 1. **系统架构** ...

    java memcache 使用

    使用源码分析 对于深入理解Memcached的使用,你可以阅读源码来了解其内部实现。例如,`spymemcached`库的源码可以帮助你理解如何封装Memcached协议,以及如何处理网络通信和序列化。 ### 7. 工具支持 为了便于...

    Discuz源码分析与插件开发实例进阶(高清PDF中文版)

    源码分析与插件开发实例进阶 #### 一、Discuz!系统架构与流程 Discuz!是一款国内非常流行的论坛系统软件,它以其强大的功能、灵活的扩展性和良好的用户体验著称。本书从系统架构的角度出发,详细剖析了Discuz!的...

    PHP实例开发源码-php教育新闻门户网源码.zip

    源码分析: 1. **框架选择**:此实例可能基于一种常见的PHP框架,如Laravel、CodeIgniter或Yii等,这些框架能有效提升开发效率,提供丰富的功能和良好的结构。源码中的目录结构和命名规范可以揭示所使用的框架类型...

Global site tag (gtag.js) - Google Analytics