Memcache是什么?

memcached是高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库教程负载,提升访问速度。

Memcache是danga.com的一个项目,目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的压力。它可以应对任意多个连接,使用非阻塞的网络IO。由于它的工作机制是在内存中开辟一块空间,然后建立一个HashTable,Memcached自管理这些HashTable。Memcache官方网站:http://www.danga.com/memcached,更多详细的信息可以来这里了解 关于Memcache和memcached 其实应该说这不是个问题,但网上有很多地方用着这两个不同的单词。Memcache是这个项目的名称,Memcached是这个项目的主程序的文件名,就这么简单。 工作原理:

首先 memcached 是以守护程序方式运行于一个或多个服务器中,随时接受客户端的连接操作,客户端可以由各种语言编写,目前已知的客户端 API 包括 Perl/PHP/Python/Ruby/Java/C#/C 等等。客户端在与 memcached 服务建立连接之后,接下来的事情就是存取对象了,每个被存取的对象都有一个唯一的标识符 key,存取操作均通过这个 key 进行,保存到 memcached 中的对象实际上是放置内存中的,并不是保存在 cache 文件中的,这也是为什么 memcached 能够如此高效快速的原因。注意,这些对象并不是持久的,服务停止之后,里边的数据就会丢失。

与许多 cache 工具类似,Memcached 的原理并不复杂。它采用了C/S的模式,在 server 端启动服务进程,在启动时可以指定监听的 ip,自己的端口号,所使用的内存大小等几个关键参数。一旦启动,服务就一直处于可用状态。Memcached 的目前版本是通过C实现,采用了单进程,单线程,异步I/O,基于事件 (event_based) 的服务方式.使用 libevent 作为事件通知实现。多个 Server 可以协同工作,但这些 Server 之间是没有任何通讯联系的,每个 Server 只是对自己的数据进行管理。Client 端通过指定 Server 端的 ip 地址(通过域名应该也可以)。需要缓存的对象或数据是以 key->value 对的形式保存在Server端。key 的值通过 hash 进行转换,根据 hash 值把 value 传递到对应的具体的某个 Server 上。当需要获取对象数据时,也根据 key 进行。首先对 key 进行 hash,通过获得的值可以确定它被保存在了哪台 Server 上,然后再向该 Server 发出请求。Client 端只需要知道保存 hash(key) 的值在哪台服务器上就可以了。

其实说到底,memcache 的工作就是在专门的机器的内存里维护一张巨大的 hash 表,来存储经常被读写的一些数组与文件,从而极大的提高网站的运行效率(当然花钱就是必不可免的事了,听说 MySpace 的每台 Cache 服务器都配备了至少 64G 的内存)



常用方法:

Memcache::add // 添加一个值,如果已经存在,则返回false Memcache::addServer // 添加Memcache地址 Memcache::close // 关闭一个Memcache的连接

Memcache::connect // 打开一个到Memcache的连接

Memcache::decrement // 对保存的某个key中的值进行减法操作 Memcache::delete // 删除一个Memcache上的key值

Memcache::flush // 刷新所有Memcache上保存的项目(类似于删除所有的保存的项目) Memcache::get // 从Memcache上获取一个key值

Memcache::getExtendedStats // 获取进程池中所有进程的运行系统 统计 Memcache::getServerStatus // 获取运行服务器 的参数 Memcache::getStats //获取当前Memcache服务器运行的状态 Memcache::getVersion // 返回运行的Memcache的版本信息 Memcache::increment // 对保存的某个key中的值进行加法操作 Memcache::pconnect // 打开一个到Memcache的长连接

Memcache::replace // 替换一个已经存在Memcache服务器上的项目(功能 类似Memcache::set)

Memcache::set // 向Memcache添加一个值,如果已经存在,则覆写 Memcache::setCompressThreshold // 对大于某一大小的数据进行压缩 Memcache::setServerParams // 在运行时修改服务器的参数 用法实例:

$mem = new Memcache;

$mem->connect("127.0.0.1", 11211);

//Memcache::set方法有四个参数,第一个参数是key,第二个参数是value,第三个参数可选,表示是否压缩保存,第四个参数可选,用来设置一个过期自动销毁的时间 。 $mem->set('test','123',0,60);

//Memcache::add方法的作用和Memcache::set方法类似,区别是如果 Memcache::add方法的返回值为false,表示这个key已经存在,而Memcache::set方法则会直接覆写。 $mem->add('test','123',0,60);

//Memcache::get方法的作用是获取一个key值,Memcache::get方法有一个参数,表示key。 $mem->get('test');//输出为'123'

//Memcache::replace 方法的作用是对一个已有的key进行覆写操作,Memcache::replace方法有四个参数,作用和Memcache::set方法的相同。 $mem->replace('test','456',0,60);

//Memcache::delete方法的作用是删除一个key值,Memcache::delete方法有两个参数,第一个参数表示key,第二个参数可选,表示删除延迟的时间。