Memcached 学习
http://baike.baidu.com/view/794242.htmhttp://www.oschina.net/p/memcached
Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。
它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度。
Memcached基于一个存储键/值对的hashmap。
其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。
memcached缺乏认证以及安全管制,这代表应该将memcached服务器放置在防火墙后。
memcached作为高速运行的分布式缓存服务器,具有以下的特点。
· 协议简单
· 基于libevent的事件处理
· 内置内存存储方式
· memcached不互相通信的分布式
协议简单:
使用简单的基于文本行的协议。
因此,通过telnet也能在memcached上保存数据、取得数据。
基于libevent的事处理
libevent是个程序库,它将Linux的epoll、BSD类操作系统的kqueue等事件处理功能封装成统一的接口。
即使对服务器的连接数增加,也能发挥O(1)的性能。
memcached使用这个libevent库,因此能在Linux、BSD、Solaris等操作系统上发挥其高性能。
内置内存存储方式
为了提高性能,memcached中保存的数据都存储在memcached内置的内存存储空间中。
由于数据仅存在于内存中,因此重启memcached、重启操作系统会导致全部数据消失。
另外,内容容量达到指定值之后,就基于LRU(Least Recently Used)算法自动删除不使用的缓存。
memcached本身是为缓存而设计的服务器,因此并没有过多考虑数据的永久性问题。
另外,由于memcached通常只是当作快取系统使用,所以使用memcached的应用程式在写回较慢的系统时(像是后端的数据库)需要额外的程式码更新memcached内的资料。
不互相通信的分布式
memcached尽管是“分布式”缓存服务器,但服务器端并没有分布式功能。
各个memcached不会互相通信以共享信息。
分布式完全取决于客户端的实现
用客户端连接
许多语言都实现了连接memcached的客户端,其中以Perl、PHP为主。
仅仅memcached网站上列出的语言就有
· Perl
· PHP
· Python
· Ruby
· C#
· C/C++
· Lua
等等。
(似乎没有java)
由于memcached通常只是当作快取系统使用,所以使用memcached的应用程式在写回较慢的系统时(像是后端的数据库)需要额外的程式码更新memcached内的资料。
memcached具有多种语言的客户端开发包,包括:Perl/PHP/JAVA/C/Python/Ruby/C#/MySQL/
http://blog.developers.api.sina.com.cn/?p=124
如果只是本地级缓存,使用memcached是非常不划算的。
此时,建议使用APC、共享内存等方式。
在大型系统中,访问同样的数据是很频繁的,memcached可以大大降低数据库压力,使系统执行效率提升。
另外,memcached也经常作为服务器之间数据共享的存储媒介,
例如在SSO系统中保存系统单点登陆状态的数据就可以保存在memcached中,被多个应用共享。
很多人的错误理解,memcached的性能非常好,好到了内存和硬盘的对比程度,
其实memcached使用内存并不会得到成百上千的读写速度提高,它的实际瓶颈在于网络连接
它和使用磁盘的数据库系统相比,好处在于它本身非常“轻”,因为没有过多的开销和直接的读写方式,
它可以轻松应付非常大的数据交换量,所以经常会出现两条千兆网络带宽都满负荷了
其他:
APR环境介绍
APR的全称:Apache Portable Runtime。它是Apache软件基金会创建并维持的一套跨平台的C语言库。它从Apache httpd1.x中抽取出来并独立于httpd之外,Apache httpd2.x就是建立在APR上。APR提供了很多方便的API接口可供使用,包括如内存池、字符串操作、网络、数组、hash表等实用的功能。开发Apache2 Module要接触很多APR函数,当然APR可以独立安装独立使用,可以用来写自己的应用程序,不一定是Apache httpd的相关开发。
Alternative PHP Cache(APC)是 PHP 的一个免费公开的优化代码缓存。
它用来提供免费,公开并且强健的架构来缓存和优化 PHP 的中间代码。
问:
memcached与hibernate的关系。
答:
memcached可以作为hibernate的二级缓存。
因为memcached的缓存是分布式的,可以让不同主机上的多个用户同时访问,因此解决了共享内存只能单机应用的局限。
另:hibernate的缓存机制是其成为主流持久层技术的主要原因。
http://www.cnblogs.com/azai/archive/2010/07/11/1775076.html
页:
[1]