memcached 是以LiveJournal 旗下Danga Interactive 公司的Brad Fitzpatric 为首开发的一款软件。如今已成为 mixi、 hatena、 Facebook、 Vox、LiveJournal等众多服务中 提升Web应用扩展性的重要因素。算法
许多Web应用都将数据保存到RDBMS中,应用服务器从中读取数据并在浏览器中显示。 但随着数据量的增大、访问的集中,就会出现RDBMS的负担加剧、数据库响应恶化、 网站显示延迟等重大影响。数据库
这时就该memcached大显身手了。memcached是高性能的分布式内存缓存服务器。 通常的使用目的是,经过缓存数据库查询结果,减小数据库访问次数,以提升动态Web应用的速度、 提升可扩展性。浏览器
经过缓存数据库查询结果,减小数据库访问次数,以提升动态Web应用的速度、 提升可扩展性。缓存
图1 通常状况下memcached的用途服务器
memcached做为高速运行的分布式缓存服务器,具备如下的特色。分布式
协议简单memcached
基于libevent的事件处理性能
内置内存存储方式网站
memcached不互相通讯的分布式spa
memcached的服务器客户端通讯并不使用复杂的XML等格式, 而使用简单的基于文本行的协议。所以,经过telnet 也能在memcached上保存数据、取得数据。
libevent是个程序库,它将Linux的epoll、BSD类操做系统的kqueue等事件处理功能封装成统一的接口。即便对服务器的链接数增长,也能发挥O(1)的性能。 memcached使用这个libevent库,所以能在Linux、BSD、Solaris等操做系统上发挥其高性能。 关于事件处理这里就再也不详细介绍,能够参考Dan Kegel的The C10K Problem。
为了提升性能,memcached中保存的数据都存储在memcached内置的内存存储空间中。 因为数据仅存在于内存中,所以重启memcached、重启操做系统会致使所有数据消失。 另外,内容容量达到指定值以后,就基于LRU(Least Recently Used)算法自动删除不使用的缓存。 memcached自己是为缓存而设计的服务器,所以并无过多考虑数据的永久性问题。
memcached尽管是“分布式”缓存服务器,但服务器端并无分布式功能。 各个memcached不会互相通讯以共享信息。那么,怎样进行分布式呢? 这彻底取决于客户端的实现。本连载也将介绍memcached的分布式。