Memcache文档.docx
《Memcache文档.docx》由会员分享,可在线阅读,更多相关《Memcache文档.docx(17页珍藏版)》请在冰豆网上搜索。
Memcache文档
Memcache使用说明文档
修订记录:
版本号
修订人
修订日期
修订描述
V1.0
庄欠林
2012-03-07
第一版
目录
目录2
一.简介3
二.工作原理4
三.安装5
1.windows下安装memcache5
2.linux下安装memcache6
四.Memcache所有方法及参数详解9
1.Memcache:
:
add用法10
2.Memcache:
:
addServer用法10
3.Memcache:
:
close用法11
4.Memcache:
:
connect用法12
5.memcache:
:
debug12
6.Memcache:
:
decrement用法13
7.Memcache:
:
delete用法13
8.Memcache:
:
flush14
9.Memcache:
:
get15
10.Memcache:
:
getExtendedStats15
11.Memcache:
:
getServerStatus16
12.Memcache:
:
getStats17
13.Memcache:
:
set17
14.Memcache:
:
getVersion18
15.Memcache:
:
increment18
16.Memcache:
:
pconnect19
五.其他20
一.简介
memcached是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表(如下图),它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。
Memcache是的一个项目,最早是为LiveJournal服务的,最初为了加速LiveJournal访问速度而开发的,后来被很多大型的网站采用。
目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的压力。
起初作者编写它可能是为了提高动态网页应用,为了减轻数据库检索的压力,来做的这个缓存系统。
它的缓存是一种分布式的,也就是可以允许不同主机上的多个用户同时访问这个缓存系统,这种方法不仅解决了共享内存只能是单机的弊端,同时也解决了数据库检索的压力,最大的优点是提高了访问获取数据的速度!
基于memcache作者对分布式cache的理解和解决方案。
memcache完全可以用到其他地方比如分布式数据库,分布式计算等领域。
Memcachedhash表形式(key=value对)
KEY
VALUE
变量1
可以标量
变量2
可以是数组
变量3
可以是对象
变量n
可以是任意类型
name
Zhangan
age
10
email
Aaa@
ccc@
eee@
二.工作原理
首先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表(键值对方式),来存储经常被读写的一些数组与文件,从而极大的提高网站的运行效率。
三.安装
1.windows下安装memcache
下载Memcache地址:
(1).将下载的压缩包解压放某个盘下面,比如在c:
\memcached
(2).在终端(也即cmd命令界面)下输入‘c:
\memcached\memcached.exe-dinstall’安装
(3).再输入:
‘c:
\memcached\memcached.exe-dstart’启动。
NOTE:
以后memcached将作为windows的一个服务每次开机时自动启动。
这样服务器端已经安装完毕了。
(4).启动memcached服务器:
在cmd命令界面中输入:
‘c:
\memcached\memcached.exe-l127.0.0.1-m32-dstart’
-l:
是指定ip地址,不写的话默认为本机
-m:
最大内存使用,单位MB。
默认64MB,最大好像2G
(5).下载php_memcache.dll,请自己查找对应的php版本的文件
(6).在C:
\winnt\php.ini加入一行‘extension=php_memcache.dll’
(7).重新启动Apache,然后查看一下phpinfo,如果有memcache,那么就说明安装成功!
(8).如果安装完,看一下任务管理器,出现一下情况,则说明memcache真正安装成功.
(9)memcached的基本设置:
-p监听的端口
-l连接的IP地址,默认是本机
-dstart启动memcached服务
-drestart重起memcached服务
-dstop|shutdown关闭正在运行的memcached服务
-dinstall安装memcached服务
-duninstall卸载memcached服务
-u以的身份运行(仅在以root运行的时候有效)
-m最大内存使用,单位MB。
默认64MB
-M内存耗尽时返回错误,而不是删除项
-c最大同时连接数,默认是1024
-f块大小增长因子,默认是1.25
-n最小分配空间,key+value+flags默认是48
-h显示帮助
2.linux下安装memcache
需要安装的就是服务器的Memcached的守护进程和客户端的PHP扩展php_memcache两个东西。
现在我分别来讲。
服务器端主要是安装memcache服务器端,目前的最新版本是memcached-1.4.0。
下载:
另外,Memcache用到了libevent这个库用于Socket的处理,所以还需要安装libevent,libevent的最新版本是libevent-1.2。
(如果你的系统已经安装了libevent,可以不用安装)
官网:
http:
//www.monkey.org/~provos/libevent/
下载:
http:
//www.monkey.org/~provos/libevent-1.2.tar.gz
我分别把两个东东下载回来,放到/tmp目录下:
#cd/tmp
#wget
#wgethttp:
//www.monkey.org/~provos/libevent-1.2.tar.gz
先安装libevent:
#tarzxvflibevent-1.2.tar.gz
#cdlibevent-1.2
#./configure--prefix=/usr
#make
#makeinstall
然后看看我们的libevent是否安装成功:
#ls-al/usr/lib|greplibevent
lrwxrwxrwx1root root 2111?
?
1217:
38libevent-1.2.so.1->libevent-1.2.so.1.0.3
-rwxr-xr-x 1root root 26354611?
?
1217:
38libevent-1.2.so.1.0.3
-rw-r--r-- 1root root 45415611?
?
1217:
38libevent.a
-rwxr-xr-x 1root root 81111?
?
1217:
38libevent.la
lrwxrwxrwx1root root 2111?
?
1217:
38libevent.so->libevent-1.2.so.1.0.3
还不错,都安装上了,再来安装memcache,同时需要安装中指定libevent的安装位置:
#cd/tmp
#tarzxvfmemcached-1.2.0.tar.gz
#cdmemcached-1.2.0
#./configure--with-libevent=/usr
#make
#makeinstall
如果中间出现报错,请仔细检查错误信息,按照错误信息来配置或者增加相应的库或者路径。
安装完成后会把memcached放到/usr/local/bin/memcached,我们看以下是否安装了:
#ls-al/usr/local/bin/mem*
-rwxr-xr-x1root root 13798611?
?
1217:
39/usr/local/bin/memcached
-rwxr-xr-x1root root 14017911?
?
1217:
39/usr/local/bin/memcached-debug
恩,安装完成了,
我们来启动一个Memcache的服务器端:
#/usr/local/bin/memcached-d-m10 -uroot-l192.168.0.200-p12000-c256-P/tmp/memcached.pid
-d选项是启动一个守护进程,
-m是分配给Memcache使用的内存数量,单位是MB,我这里是10MB,
-u是运行Memcache的用户,我这里是root,
-l是监听的服务器IP地址,如果有多个地址的话,我这里指定了服务器的IP地址192.168.0.200,
-p是设置Memcache监听的端口,我这里设置了12000,最好是1024以上的端口,
-c选项是最大运行的并发连接数,默认是1024,我这里设置了256,按照你服务器的负载量来设定,
-P是设置保存Memcache的pid文件,我这里是保存在/tmp/memcached.pid,如果要结束Memcache进程,执行:
#kill`cat/tmp/memcached.pid`
四.Memcache所有方法及参数详解
Memcache:
:
add-添加一个值,如果已经存在,则返回false
Memcache:
:
addServer-添加一个可供使用的服务器地址
Memcache:
:
close-关闭一个Memcache对象
Memcache:
:
connect-创建一个Memcache对象
memcache_debug-控制调试功能
Memcache:
:
decrement-对保存的某个key中的值进行减法操作
Memcache:
:
delete-删除一个key值
Memcache:
:
flush-清除所有缓存的数据
Memcache:
:
get-获取一个key值
Memcache:
:
getExtendedStats-获取进程池中所有进程的运行系统统计
Memcache:
:
getServerStatus-获取运行服务器的参数
Memcache:
:
getStats-返回服务器的一些运行统计信息
Memcache:
:
getVersion-返回运行的Memcache的版本信息
Memcache:
:
increment-对保存的某个key中的值进行加法操作
Memcache:
:
pconnect-创建一个Memcache的持久连接对象
Memcache:
:
replace-对一个已有的key进行覆写操作
Memcache:
:
set-添加一个值,如果已经存在,则覆写
Memcache:
:
setCompressThreshold-对大于某一大小的数据进行压缩
Memcache:
:
setServerParams-在运行时修改服务器的参数
1.Memcache:
:
add用法
boolMemcache:
:
add(string$key,mixed$var[,int$flag[,int$expire]])
说明:
如果$key不存在的时候,使用这个函数来存储$var的值。
功能相同的函数是memcache_add()。
参数:
$key:
将要存储的键值。
$var:
存储的值,字符型和整型会按原值保存,其他类型自动序列化以后保存。
$flag:
是否用MEMCACHE_COMPRESSED来压缩存储的值,true表示压缩,false表示不压缩。
$expire:
存储值的过期时间,如果为0表示不会过期,你可以用unix时间戳或者描述来表示从现在开始的时间,但是你在使用秒数表示的时候,不要超过2592000秒(表示30天)。
返回值:
如果成功则返回TRUE,失败则返回FALSE。
如果$key值已经存在,则会返回FALSE。
其他情况下Memcache:
:
add()的用法类似于Memcache:
:
set()。
例子:
php
$memcache_obj=memcache_connect("localhost",11211);
memcache_add($memcache_obj,'var_key','testvariable',false,30);
$memcache_obj->add('var_key','testvariable',false,30);
?
>
2.Memcache:
:
addServer用法
boolMemcache:
:
addServer(string$host[,int$port[,bool$persistent[,int$weight[,int$timeout[,int$retry_interval[,bool$status[,callback$failure_callback]]]]]]])
说明:
添加一个可供使用的服务器地址到连接池中,连接用Memcache:
:
addServer打开,脚本执行完后自动关闭,或者可以用Memcache:
:
close()手动关闭。
相同函数是memcache_add_server()。
当用这个方法的时候(相对于Memcache:
:
connect()和Memcache:
:
pconnect()方法),网络连接只有等需要的时候才会建立,因此不会因为增加很多的服务器到连接池而增加系统负担,因为很多服务器可能没有使用。
故障恢复会发生在这个方法执行的任何阶段,只要其他的服务器是正常的,这些连接请求的失败用户不会注意到。
任何一种socket或者memcached服务器级的错误可以触发故障恢复。
正常的客户端错误比如增加一个存在的键值不会引发故障恢复。
参数:
$host服务器的地址
$port服务器端口
$persistent是否是一个持久连接
$weight这台服务器在所有服务器中所占的权重
$timeout连接的持续时间
$retry_interval连接重试的间隔时间,默认为15,设置为-1表示不进行重试
$status控制服务器的在线状态
$failure_callback允许设置一个回掉函数来处理错误信息。
返回值:
如果成功则返回TRUE,失败则返回FALSE。
例子:
php
$memcache=newMemcache;
$memcache->addServer('memcache_host',11211);
$memcache->addServer('memcache_host2',11211);
$memcache_obj=memcache_connect('memcache_host',11211);
memcache_add_server($memcache_obj,'memcache_host2',11211);
?
>
3.Memcache:
:
close用法
boolMemcache:
:
close(void)
说明:
关闭memcache服务器连接。
这个函数不会关闭长连接,长连接只有在web服务器关闭或者重启的时候才会关闭。
相同的函数memcache_close()
返回值:
如果成功则返回TRUE,失败则返回FALSE。
例子:
php
$memcache_obj=memcache_connect('memcache_host',11211);
memcache_close($memcache_obj);
$memcache_obj=newMemcache;
$memcache_obj->connect('memcache_host',11211);
$memcache_obj->close();
?
>
4.Memcache:
:
connect用法
boolMemcache:
:
connect(string$host[,int$port[,int$timeout]])
说明:
打开memcached服务器连接,建立一个到memcached服务器的连接,用Memcache:
:
connect打开的连接会在脚本执行完毕后自动关闭。
你也可以用Memcache:
:
close()去关闭连接。
相同的函数是memcache_connect()。
参数:
$host:
指向memcached正在收听的链接的主机,这个参数会有另一种特殊的连接方式unix:
///path/to/memcached.sock,即用unix的域名sockets,这种情况下,端口必须设置为0
$port:
指向memcached正在收听的链接的端口,用unix的域名sockets的情况下,端口必须设置为0
$timeout:
用于连接守护进程的秒数,当你改变默认的1秒的值的时候,你需要考虑一下,如果你的连接太慢的话,你可能会失去缓存的优势。
返回值:
如果成功则返回TRUE,失败则返回FALSE。
例子:
php
$memcache_obj=memcache_connect('memcache_host',11211);
$memcache=newMemcache;
$memcache->connect('memcache_host',11211);
?
>
5.memcache:
:
debug
boolmemcache_debug(bool$on_off)
说明:
控制调试功能,前提是php在编译的时候使用了-enable-debug选项,否则这个函数不会有作用。
参数:
$on_off:
true表示开启调试,false表示关闭调试
返回值:
如果php在编译的时候使用了-enable-debug选项,返回true,否则返回false
6.Memcache:
:
decrement用法
intMemcache:
:
decrement(string$key[,int$value])
说明:
Memcache:
:
decremen方法的作用是对保存的某个key中的值进行减法操作,用法跟Memcache:
:
increment类似。
你也可以用memcache_decrement()函数。
参数:
Key:
想要减少的键的名字
Value:
想要减少的值。
返回值:
如果成功,返回被减少后的值,如果失败返回false。
例子:
php
$memcache=newMemcache;
$memcache->connect('localhost',11211);
$memcache->set('test_item',8);
$memcache->increment('test_item',4);
echo$memcache->decrement('test_item',7);
//显示5
?
>
这个例子连Memcache:
:
increment函数都一块演示了。
7.Memcache:
:
delete用法
boolMemcache:
:
delete(string$key[,int$timeout])
说明:
删除一个key值,如果参数$timeout被设置,那么存储的值会在设置的秒数以后过期,你也可以用函数memcache_delete()
返回值:
如果成功则返回TRUE,失败则返回FALSE。
例子:
php
$memcache_obj=memcache_connect('memcache_host',11211);
memcache_delete($memcache_obj,'key_to_delete',10);
$memcache_obj=newMemcache;
$memcache_obj->connect('memcache_host',11211);
$memcache_obj->delete('key_to_delete',10);
?
>
8.Memcache:
:
flush
boolMemcache:
:
flush(void)
说明:
清除所