`

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?

相关推荐

Global site tag (gtag.js) - Google Analytics