读书人

Memcached学习札记 第一部分:Memca

发布时间: 2012-11-07 09:56:10 作者: rapoo

Memcached学习笔记 — 第一部分: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等操作系统上发挥其高性能。关于事件处理这里就不再详细介绍,可以参考DanKegel的The C10K Problem。

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

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

内存缓存机制

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

?

客户端实现分布式

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

?

?

1 楼 manecocomph 2011-07-19 总结的很不错, 你们工作production env 配置了几台 memcahced server instance?

读书人网 >软件架构设计

热点推荐