`

Memcached学习笔记 — 第一部分:Memcached基础

 
阅读更多

 

     本文是基于网上资料和自己的理解整理的学习笔记,中间涉及的网络资料,我在文档后的参考统一列举。如果我的某些理解有误,望谅解,并希望得到你的回复。

 

什么是 memcached

在许多高并发的应用中,把业务数据保持久化 ( 保存到数据库,磁盘文件或其它 ) 后,应用从持久化设备中读取数据并在浏览器中显示,随用户量,数据量增大,访问的集中,会出现持久化设备负担过重(典型的就是数据库),影响应用响应速度,应用延迟严重等重大问题。典型的应用就是 WEB 应用中的高并发网站。

这时候应用就需要一种缓存机制来提高并发读取速度的性能 memcached 能在大中型系统中提供优秀的缓存服务。 memcached 是高性能的分布式内存缓存服务器。一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态 Web 应用的速度、提高可扩展性。

memcached 是以 LiveJournal 旗下 Danga Interactive 公司的 Brad Fitzpatric 为首开发的一款软件。现在已成为 mixi hatena Facebook Vox LiveJournal 等众多服务中提高 Web 应用扩展性的重要因素。

官方网站: http://memcached.com

 

Memcached 的原理和功能如下图:

 



 这图片是网上找的,后面有引用地址,画的很贴切,本想自己画个,但是想了下,自己画来也差不多,就懒了。。。

 

 

memcached 特点

协议简单

memcached 的服务器客户端通信并不使用复杂的 XML 等格式, 而使用简单的基于文本行的协议。因此,通过 telnet 也能在 memcached 上保存数据、取得数据。下面是官方的例子:

 

$ telnet localhost 11211

Trying 127.0.0.1...

Connected to localhost.localdomain (127.0.0.1).

Escape character is '^]'.

set foo 0 0 3     (保存命令)

bar               (数据)

STORED            (结果)

get foo           (取得命令)

VALUE foo 0 3     (数据)

bar               (数据)

协议文档位于 memcached 的源代码内,也可以参考以下的 URL

http://code.sixapart.com/svn/memcached/trunk/server/doc/protocol.txt

命令介绍请参考后续介绍

 

基于 libevent 的事件处理

libevent 是个程序库,它将 Linux epoll BSD 类操作系统的 kqueue 等事件处理功能 封装成统一的接口。即使对服务器的连接数增加,也能发挥 O(1) 的性能。 memcached 使用这个 libevent 库,因此能在 Linux BSD Solaris 等操作系统上发挥其高性能。 关于事件处理这里就不再详细介绍,可以参考 Dan Kegel The C10K Problem

libevent: http://www.monkey.org/~provos/libevent/

The C10K Problem: http://www.kegel.com/c10k.html

内存缓存机制

为了提高性能, memcached 中保存的数据都存储在 memcached 内置的内存存储空间中。 由于数据仅存在于内存中,因此重启 memcached 、重启操作系统会导致全部数据消失。 另外,内容容量达到指定值之后,就基于 LRU(Least Recently Used) 算法自动删除不使用的缓存。 memcached 本身是为缓存而设计的服务器,因此并没有过多考虑数据的永久性问题。 关于内存缓存机制和模型请参考后续介绍。

 

客户端实现分布式

memcached 尽管是 分布式 缓存服务器,但服务器端并没有分布式功能。 各个 memcached 不会互相通信以共享信息。那么,怎样进行分布式呢? 这完全取决于客户端的实现。本连载也将介绍 memcached 的分布式。

 

 

  • 大小: 138.3 KB
分享到:
评论
1 楼 manecocomph 2011-07-19  
总结的很不错, 你们工作production env 配置了几台 memcahced server instance?

相关推荐

    Memcached学习笔记 — 第四部分:Memcached Java 客户端-gwhalin(1)-介绍及使用

    本篇学习笔记将重点介绍如何在Java环境中使用gwhalin提供的Memcached客户端进行开发。gwhalin的Memcached Java客户端是一个轻量级、高性能的库,使得Java开发者可以轻松地与Memcached服务器进行交互。 ### 一、...

    Mysql\学习笔记\mysql优化

    1. 第一范式(1NF):这是关系型数据库的基础,要求每个字段都不可再分,即每一列都是原子性的。避免在同列中存储多个值,确保数据的最小化。如果发现某列有重复属性,应当创建新的实体,用一对多关系与原实体关联。...

    PHP自学笔记

    在PHP的基础部分,1php基础文件着重介绍了PHP语言的基本语法,包括变量声明、数据类型、流程控制(如if-else,switch-case)、函数的使用以及字符串和数组的操作等。这是学习PHP的第一步,也是所有后续进阶知识的...

    【PDF版本】老男孩教育Linux高端运维及云计算架构师-就业班20170513V9.pdf

    ### 第一阶段:Linux基础 - **开班课程介绍**:了解课程安排、学习目标及预期成果。 - **规章制度介绍**:熟悉课堂规则、学习纪律等。 - **破冰活动**:增进同学间的相互了解。 - **Linux硬件基础/Linux发展历史**...

    乐优商城笔记.zip

    通过这份"乐优商城笔记",开发者可以学习到一个完整的电商系统从设计到实现的全过程,涵盖从后端开发到前端展示,再到部署运维的诸多环节,对提升个人在全栈开发领域的专业能力具有极大的价值。

    网上商城实战笔记包含源码

    通过学习《网上商城实战笔记》,开发者可以系统地学习以上各个方面的知识,并通过源码实践加深理解,从而具备独立构建并维护一个网上商城系统的能力。这不仅对个人技能提升有极大帮助,也为未来的职业发展奠定了坚实...

    ImagesForGulimall-商城笔记图片

    1. **MVC架构**:大部分Java商城系统采用Model-View-Controller(MVC)设计模式,它将业务逻辑、用户界面和数据控制分离,使得代码结构清晰,易于维护。 2. **Spring框架**:Spring是Java企业级应用的核心框架,...

    nginx 集群文档

    - **Memcached**:一种内存键值存储系统,常用于存储session数据,Nginx可以配置为通过memcached与后端服务器通信,确保session在所有服务器间的同步。 - **Session ID与哈希策略**:通过特定的哈希算法(如IP哈希...

    springboot049在线教育系统设计与实现.rar

    1. **论文.doc** - 这可能是一份详细阐述项目背景、目标、设计思路和技术实现的学术论文,对于理解整个系统的架构和设计理念非常有帮助。 2. **pptspringboot049在线教育系统.pptx** - 很可能是项目介绍或演示的PPT...

    VIP .Net培训高级班第十期全套资料(含代码).rar

    1. **.NET框架**:学习.NET,首先要了解.NET Framework的基础,包括CLR(Common Language Runtime)和类库,它们为开发各种应用程序提供支持。 2. **C#语言**:作为.NET的主要编程语言,C#的学习至关重要,包括语法...

    DJANGO课件

    1. **基础概念** - **MVC(Model-View-Controller)架构**:DJango遵循MVT模式(Model-View-Template),其中Model负责数据处理,View处理逻辑,Template渲染视图。 - **URL路由系统**:通过URLconf将URL映射到...

    03 源码框架专题04.zip

    【描述】虽然描述信息较为简略,但可以推测该压缩包可能包含两部分教程或笔记,即"Spring Boot快速集成第三方技术详解(1).vep"和"Spring Boot快速集成第三方技术详解(2).vep"。这两份文件很可能提供了详细的步骤...

    springboot034在线商城系统设计与开发-代码.zip

    【描述】"springboot034在线商城系统设计与开发-代码" 提供的信息有限,但可以推测这是一个教学项目或课程的一部分,编号"034"可能是课程或系列教程中的一个序列号。这个项目涵盖了在线商城系统的开发,涉及用户管理...

    ThinkPHP视频教程

    2. **环境搭建**:讲解如何配置PHP运行环境,安装并设置ThinkPHP框架,以及创建第一个“Hello, World!”项目。 3. **路由与控制器**:详细介绍ThinkPHP的路由规则和控制器设计,如何处理HTTP请求并返回响应。 4. *...

    Oracle资料集合

    "MySQL数据库开发规范_v1.0.docx"和"MySQL_第二版中文版.pdf"则为学习和应用MySql提供了基础。MySql是另一种广泛使用的开源关系型数据库管理系统,尤其适合Web应用程序。开发规范文档可能包含如何编写整洁、可维护的...

    高性能高并发服务器架构大全

     Memcached和Lucene笔记 110  使用开源软件,设计高性能可扩展网站 110  面向高负载的架构Lighttpd+PHP(FastCGI)+Memcached+Squid 113  思考高并发高负载网站的系统架构 113  "我在SOHU这几年做的一些...

    Hyperf协程框架 v2.2.40.zip

    1. **Swoole协程基础**:Hyperf依赖于Swoole协程库,这是一个C语言编写的PHP扩展,实现了异步非阻塞I/O模型,通过协程(Coroutine)技术,使得PHP可以实现低延迟、高并发的网络编程。Swoole协程避免了传统多线程、多...

Global site tag (gtag.js) - Google Analytics