Memcached是什么?
Memcached是由Danga Interactive开发的,高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。
Memcached能缓存什么?
通过在内存里维护一个统一的巨大的hash表,Memcached能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。
Memcached快么?
非常快。Memcached使用了libevent(如果可以的话,在linux下使用epoll)来均衡任何数量的打开链接,使用非阻塞的网络I/O,对内部对象实现引用计数(因此,针对多样的客户端,对象可以处在多样的状态), 使用自己的页块分配器和哈希表,因此虚拟内存不会产生碎片并且虚拟内存分配的时间复杂度可以保证为O(1).。 Danga Interactive为提升Danga Interactive的速度研发了Memcached。目前,LiveJournal.com每天已经在向一百万用户提供多达两千万次的页面访问。而这些,是由一个由web服务器和数据库服务器组成的集群完成的。Memcached几乎完全放弃了任何数据都从数据库读取的方式,同时,它还缩短了用户查看页面的速度、更好的资源分配方式,以及Memcache失效时对数据库的访问速度。
Memcached的特点
Memcached的缓存是一种分布式的,可以让不同主机上的多个用户同时访问, 因此解决了共享内存只能单机应用的局限,更不会出现使用数据库做类似事情的时候,磁盘开销和阻塞的发生。
MemCache的目录如下,其实代码调用非常简单,主要会用到的方法有 add()、get()、replace() 和 delete(),方法说明如下:
Memcache::add -- Add an item to the server add ($key, $val, $exp = 0) 往 memcached 中写入对象,$key 是对象的唯一标识符,$val 是写入的对象数据,$exp 为过期时间,单位为秒,默认为不限时间;
Memcache::delete -- Delete item from the server delete ($key, $time = 0) 删除 memcached 中标识符为 $key 的对象,$time 为可选参数,表示删除之前需要等待多长时间。
Memcache::get -- Retrieve item from the server get ($key)
从 memcached 中获取对象数据,通过对象的唯一标识符 $key 获取;
Memcache::replace -- Replace value of the existing item replace ($key, $value, $exp=0) 使用 $value 替换 memcached 中标识符为 $key 的对象内容,参数与 add() 方法一样,只有 $key 对象存在的情况下才会起作用;
bool Memcache::set ( string key, mixed var [, int flag [, int expire]] ) -- 保存数据到Memcache服务器上
string key:惟一关键字 关键字用于从缓存中检索相关数据。如果每条记录都有一个惟一 ID,则可能足以作为缓存关键字,但是您可以策划其他模式来满足需求。
-
mixed var :要缓存的变量
- 变量可以是任意类型,只要它可以被序列化为持久的变量并且可以取消序列化为检索的变量。 int flag :用于启用通过 zlib 进行动态压缩的布尔值
- 使用 MEMCACHE_COMPRESSED 来压缩信息到内存中 —— 虽然处理数据时都要以保存和恢复为代价。
int expire:以秒为单位指定的过期时间
-
当缓存的数据过期时,它将被自动删除。如果将此值设为
0
,则该条目永远不会在缓存中过期。使用 Memcache APIdelete()
函数删除这样一个永久对象。
Memcache::connect -- 打开一个到Memcache的连接 Memcache::pconnect -- 打开一个到Memcache的长连接 Memcache::close -- 关闭一个Memcache的连接 Memcache::flush -- 刷新所有Memcache服务器上保存的项目(类似于删除所有的保存的项目) Memcache::getStats -- 获取当前Memcache服务器运行的状态
另外为了看到所有slabs组的统计数据以及统计情况:通过telnet 127.0.0.1 11211 可以连上memcached, 键入命令 stats slabs 可以看到所有slabs组的统计数据以及统计情况了