您的位置:首页 > 数据库 > Memcache

php操作memcache的使用测试总结

2013-05-08 14:15 691 查看

1.简介

memcache模块是一个高效的守护进程,提供用于内存缓存的过程式程序和面向对象的方便的接口,特别是对于设计动态web程序时减少对数据库的访问。memcache也提供用于通信对话(session_handler)的处理。更多Memcache模块相关信息可以到http://www.danga.com/memcached/查阅。

1.1.memcache在php.ini中的配置项列表

memcache在php.ini中的配置项列表
名称默认值是否可变改变日志
memcache.allow_failover“1”PHP_INI_ALLAvailablesincememcache2.0.2.
memcache.max_failover_attempts"20"PHP_INI_ALLAvailablesincememcache2.1.0.
memcache.chunk_size"8192"PHP_INI_ALLAvailablesincememcache2.0.2.
memcache.default_port"11211"PHP_INI_ALLAvailablesincememcache2.0.2.
memcache.hash_strategy"standard"PHP_INI_ALLAvailablesincememcache2.2.0.
memcache.hash_function"crc32"PHP_INI_ALLAvailablesincememcache2.2.0.
session.save_handler"files"PHP_INI_ALLSupportedsincememcache2.1.2
session.save_path""PHP_INI_ALLSupportedsincememcache2.1.2
有关PHP_INI_*常量进一步的细节与定义参见PHP手册php.ini配置选项。

1.2.以下是配置项的简要解释

memcache.allow_failoverBoolean在错误时是否透明的故障转移到其他服务器上处理(注:故障转移是动词)。memcache.max_failover_attemptsinteger定义服务器的数量类设置和获取数据,只联合memcache.allow_failover一同使用。memcache.chunk_sizeinteger数据将会被分成指定大小(chunk_size)的块来传输,这个值(chunk_size)越小,写操作的请求就越多,如果发现其他的无法解释的减速,请试着将这个值增大到32768.memcache.default_portstring当连接memcache服务器的时候,如果没有指定端口这个默认的tcp端口将被用。memcache.hash_strategystring控制在映射key到服务器时使用哪种策略。设置这个值一致能使hash算法始终如一的使用于服务器接受添加或者删除池中变量时将不会被重新映射。设置这个值以标准的结果在旧的策略被使用时。memcache.hash_functionstring控制哪种hsah函数被应用于key映射到服务器过程中,默认值“crc32”使用CRC32算法,而“fnv”则表示使用FNV-1a算法。session.save_handlerstring通过设置这个值为memcache来确定使用memcache用于通信对话的处理(sessionhandler)。session.save_pathstring定义用于通话存储的各服务器链接的分隔符号,例如:“tcp://host1:11211,tcp://host2:11211”。每服务器个链接可以包含被接受于该服务器的参数,比较类似使用Memcache::addServer()来添加的服务器,例如:“tcp://host1:11211?persistent=1&weight=1&timeout=1&retry_interval=15”。

1.3.memcache常量列表

memcache常量列表
名称类型描述
MEMCACHE_COMPRESSEDinteger用于调整在使用Memcache::set(),Memcache::add()和Memcache::replace()几个函数时的压缩比率。
MEMCACHE_HAVE_SESSIONinteger如果通信对话的处理(sessionhandler)被允许使用其值为1,其他情况值为0。

2MemcacheFunctions函数列表

2.1.Memcache::connect

2.1.1.说明

boolMemcache::connect(string$host[,int$port[,int$timeout]])连接memcache服务器

2.1.2.参数

$host(string)服务器域名或ip$port(int)服务器tcp端口号,默认值是11211$timeout连接memcache进程的失效时间,在修改它的默认值1的时候要三思,以免失去所有memcache缓存的优势导致连接变得很慢。

2.1.3.返回值

如果成功则返回true,失败则返回false

2.1.4.范例

<?php/*proceduralAPI*/$memcache_obj=memcache_connect(‘memcache_host‘,11211);/*OOAPI*/$memcache=newMemcache;$memcache->connect(‘memcache_host‘,11211);?>

2.2.Memcache::pconnect

2.2.1.说明

boolMemcache::pconnect(string$host[,int$port[,int$timeout]])以常连接方式连接服务器

2.2.2.参数

$host(string)服务器域名或ip$port(int)服务器tcp端口号,默认值是11211$timeout连接memcache进程的失效时间,在修改它的默认值1的时候要三思,以免失去所有memcache缓存的优势导致连接变得很慢。

2.2.3.返回值

如果成功则返回true,失败则返回false

2.2.4.范例

<?php/*proceduralAPI*/$memcache_obj=memcache_pconnect(‘memcache_host‘,11211);/*OOAPI*/$memcache_obj=newMemcache;$memcache_obj->pconnect(‘memcache_host‘,11211);?>

2.3.Memcache::close

2.3.1.说明

boolMemcache::close(void)关闭对象(对常连接不起作用)

2.3.2.返回值

如果成功则返回true,失败则返回false

2.3.3.范例

<?php/*proceduralAPI*/$memcache_obj=memcache_connect(‘memcache_host‘,11211);/*dosomethinghere..*/memcache_close($memcache_obj);/*OOAPI*/$memcache_obj=newMemcache;$memcache_obj->connect(‘memcache_host‘,11211);/*dosomethinghere..*/$memcache_obj->close();?>

2.4.Memcache::addServer

2.4.1.说明

boolMemcache::addServer(string$host[,int$port[,bool$persistent[,int$weight[,int$timeout[,int$retry_interval[,bool$status[,callback$failure_callback]]]]]]])向对象添加一个服务器(注:addServer没有连接到服务器的动作,所以在memcache进程没有启动的时候,执行addServer成功也会返回true)

2.4.2.参数

host服务器域名或IPport端口号,默认为11211persistent是否使用常连接,默认为TRUEweight权重,在多个服务器设置中占的比重timeout连接服务器失效的秒数,修改默认值1时要三思,有可能失去所有缓存方面的优势导致连接变得很慢retry_interval服务器连接失败时的重试频率,默认是15秒一次,如果设置为-1将禁止自动重试,当扩展中加载了dynamicallyviadl()时,无论本参数还是常连接设置参数都会失效。每一个失败的服务器在失效前都有独自的生存期,选择后端请求时会被跳过而不服务于请求。一个过期的连接将成功的重新连接或者被标记为失败的连接等待下一次重试。这种效果就是说每一个webserver的子进程在服务于页面时的重试连接都跟他们自己的重试频率有关。status控制服务器是否被标记为online,设置这个参数为FALSE并设置retry_interval为-1可以使连接失败的服务器被放到一个描述不响应请求的服务器池子中,对这个服务器的请求将失败,接受设置为失败服务器的设置,默认参数为TRUE,代表该服务器可以被定义为online。failure_callback失败时的回调函数,函数的两个参数为失败服务器的hostname和port

2.4.3.返回值

成功返回TRUE,失败返回FALSE。注:在测试addServer函数的时候我们主要测试了其参数retry_interval和status

2.4.4.范例

2.4.4.1.retry_interval参数的测试<?php$mem=newMemcache;$is_add=$mem->addServer(‘localhost‘,11211,true,1,1,15,true);//retrt_interval=15$is_set=$mem->set(‘key1‘,‘中华人民共和国‘);?>上面的例子中如果localhost服务器down掉或是memcache守护进程当掉,执行请求的时候连接服务器失败时算起15秒后会自动重试连接服务器,但是在这15秒内不会去连接这个服务器,就是只要有请求,没15秒就会尝试连接服务器,但是每个服务器连接重试是独立的。比如说我一次添加了两个服务器一个是localhost,一个是172.16.100.60,它们分别是从各自连接失败那个时间算起,只要对各自服务器有请求就会每隔15秒去连接各自的服务器的。2.4.4.2.retry_interval和status结合使用的情况<?php$mem=newMemcache;$is_add=$mem->addServer(‘localhost‘,11211,true,1,1,-1,false);//retrt_interval=-1,status=false$is_set=$mem->set(‘key1‘,‘中华人民共和国‘);?>
在上面的retrt_interval=-1,status=false这种情况下,将连接失败的服务器放到一个不响应请求的一个池子中,因此对key分配的算法也就没有影响了,而他是立即返回错误失败还是故障转移还要看memcache.allow_failover的设置,执行set,add,replace,get等请求的时候都会失败返回false,即使memcache进程运行正常。

2.4.4.3.status参数的测试

除了与retry_interval结合使用,status单独使用的情况会对函数memcache::getServerStatu获得的结果产生影响无论memcache进程的正常运行还是当掉,status为true的时候getServerStatus的结果都是true,反之则为false但是在memcache进程正常运行的情况下,对set,add,replace,get等函数都没有影响。

2.5.Memcache::add

2.5.1.说明

boolMemcache::add(string$key,mixed$var[,int$flag[,int$expire]])添加一个要缓存的数据如果作为这个缓存的数据的键在服务器上还不存在的情况下,

2.5.2.参数

key缓存数据的键其长度不能超过250个字符var值,整型将直接存储,其他类型将被序列化存储,其值最大为1Mflag是否使用zlib压缩,当flag=MEMCACHE_COMPRESSED的时侯,数据很小的时候不会采用zlib压缩,只有数据达到一定大小才对数据进行zlib压缩。(没有具体的测试数据进行压缩的最小值是多少)expire过期时间,0为永不过期,可使用unix时间戳格式或距离当前时间的秒数,设为秒数时不能大于2592000(30天)

2.5.3.返回值

成功返回TRUE,失败返回FALSE,如果这个键已经存在,其他方面memcache:;add()的行为与memcache::set相似

2.5.4.范例

<?php$memcache_obj=memcache_connect("localhost",11211);/*proceduralAPI*/memcache_add($memcache_obj,‘var_key‘,‘testvariable‘,FALSE,30);/*OOAPI*/$memcache_obj->add(‘var_key‘,‘testvariable‘,FALSE,30);?>

2.6.Memcache::replace

2.6.1.说明

boolMemcache::replace(string$key,mixed$var[,int$flag[,int$expire]])替换一个指定已存在key的的缓存变量内容

2.6.2.参数

key缓存数据的键,其长度不能超过250个字符var值,整型将直接存储,其他类型将被序列化存储,其值最大为1Mflag是否使用zlib压缩,当flag=MEMCACHE_COMPRESSED的时侯,数据很小的时候不会采用zlib压缩,只有数据达到一定大小才对数据进行zlib压缩。(没有具体的测试数据进行压缩的最小值是多少)expire过期时间,0为永不过期,可使用unix时间戳格式或距离当前时间的秒数,设为秒数时不能大于2592000(30天)

2.6.3.返回值

成功返回TRUE,失败返回FALSE。

2.6.4.范例

<?php$memcache_obj=memcache_connect(‘memcache_host‘,11211);/*proceduralAPI*/memcache_replace($memcache_obj,"test_key","somevariable",FALSE,30);/*OOAPI*/$memcache_obj->replace("test_key","somevariable",FALSE,30);?>

2.7.Memcache::set

2.7.1.说明

boolMemcache::set(string$key,mixed$var[,int$flag[,int$expire]])设置一个指定key的缓存变量内容

2.7.2.参数

key缓存数据的键,其长度不能超过250个字符var值,整型将直接存储,其他类型将被序列化存储,其值最大为1Mflag是否使用zlib压缩,当flag=MEMCACHE_COMPRESSED的时侯,数据很小的时候不会采用zlib压缩,只有数据达到一定大小才对数据进行zlib压缩。(没有具体的测试数据进行压缩的最小值是多少)expire过期时间,0为永不过期,可使用unix时间戳格式或距离当前时间的秒数,设为秒数时不能大于2592000(30天)

2.7.3.返回值

成功返回TRUE,失败返回FALSE。

2.7.4.范例

<?php/*proceduralAPI*//*connecttomemcachedserver*/$memcache_obj=memcache_connect(‘memcache_host‘,11211);/*setvalueofitemwithkey‘var_key‘using0asflagvalue,compressionisnotusedexpiretimeis30second*/memcache_set($memcache_obj,‘var_key‘,‘somevariable‘,0,30);echomemcache_get($memcache_obj,‘var_key‘);?><?php/*OOAPI*/$memcache_obj=newMemcache;/*connecttomemcachedserver*/$memcache_obj->connect(‘memcache_host‘,11211);/*setvalueofitemwithkey‘var_key‘,usingon-the-flycompressionexpiretimeis50seconds*/$memcache_obj->set(‘var_key‘,‘somereallybigvariable‘,MEMCACHE_COMPRESSED,50);echo$memcache_obj->get(‘var_key‘);?>

2.8.Memcache::get

2.8.1.说明

stringMemcache::get(string$key[,int&$flags])arrayMemcache::get(array$keys[,array&$flags])获取某个key的变量缓存值

2.8.2.参数

key缓存值的键flags如果是传址某个变量,获取缓存值被set或是add的flag结果将被存于该变量

2.8.3.返回值

返回缓存的指定key的变量内容或者是在失败或该变量的值不存在时返回FALSE如果传出的key的数组中的key都不存在,返回的结果是一个空数组,反之则返回key与缓存值相关联的关联数组

2.8.4.范例

<?php/*proceduralAPI*/$memcache_obj=memcache_connect(‘memcache_host‘,11211);$var=memcache_get($memcache_obj,‘some_key‘);/*OOAPI*/$memcache_obj=newMemcache;$memcache_obj->connect(‘memcache_host‘,11211);$var=$memcache_obj->get(‘some_key‘);/*Youalsocanusearrayofkeysasaparameter.Ifsuchitemwasn‘tfoundattheserver,theresultarraysimplywillnotincludesuchkey.*//*proceduralAPI*/$memcache_obj=memcache_connect(‘memcache_host‘,11211);$var=memcache_get($memcache_obj,Array(‘some_key‘,‘another_key‘));//如果some_key,another_key不存在$var=array();//如果some_key,another_key存在$var=array(‘some_key‘=>‘缓存值‘,‘another_key‘=>‘缓存值‘);/*OOAPI*/$memcache_obj=newMemcache;$memcache_obj->connect(‘memcache_host‘,11211);$var=$memcache_obj->get(Array(‘some_key‘,‘second_key‘));?>

2.9.Memcache::delete

2.9.1.说明

boolMemcache::delete(string$key[,int$timeout])删除某一个变量的缓存

2.9.2.参数

key缓存的键键值不能为null和‘’,当它等于前面两个值的时候php会有警告错误。timeout删除这项的时间,如果它等于0,这项将被立刻删除反之如果它等于30秒,那么这项被删除在30秒内

2.9.3.返回值

成功返回TRUE,失败返回FALSE。2.9.4.范例<?php/*proceduralAPI*/$memcache_obj=memcache_connect(‘memcache_host‘,11211);/*after10secondsitemwillbedeletedbytheserver*/memcache_delete($memcache_obj,‘key_to_delete‘,10);/*OOAPI*/$memcache_obj=newMemcache;$memcache_obj->connect(‘memcache_host‘,11211);$memcache_obj->delete(‘key_to_delete‘,10);?>

2.10.Memcache::flush

2.10.1.说明

boolMemcache::flush(void)清空所有缓存内容,不是真的删除缓存的内容,只是使所有变量的缓存过期,使内存中的内容被重写

2.10.2.返回值

成功返回TRUE,失败返回FALSE。

2.10.3.范例

<?php/*proceduralAPI*/$memcache_obj=memcache_connect(‘memcache_host‘,11211);memcache_flush($memcache_obj);/*OOAPI*/$memcache_obj=newMemcache;$memcache_obj->connect(‘memcache_host‘,11211);$memcache_obj->flush();?>

2.11.Memcache::getExtendedStats

2.11.1.说明

arrayMemcache::getExtendedStats([string$type[,int$slabid[,int$limit]]])获取所有服务器扩展静态信息

2.11.2.参数

type静态信息类型,有效值包括{reset,malloc,maps,cachedump,slabs,items,sizes},依照一定规则协议这个可选参数是为了方便开发人员查看不同类别的信息而输入的标题slabid用于按指定类型联合设置cache堆为有效的片到堆中。缓存堆被被命令绑定到服务器上并被严格的用于调试用途limit用于按指定类型联合设置cache堆为输入的数字所限制的大小到堆,默认值为100

2.11.3.返回值

返回一个由服务器扩展静态信息二维数组,失败时返回FALSE

2.11.4.范例

<?php$memcache_obj=newMemcache;$memcache_obj->addServer(‘memcache_host‘,11211);$memcache_obj->addServer(‘failed_host‘,11211);$stats=$memcache_obj->getExtendedStats();print_r($stats);?>
输出结果
Array([memcache_host:11211]=>Array([pid]=>3756[uptime]=>603011[time]=>1133810435[version]=>1.1.12[rusage_user]=>0.451931[rusage_system]=>0.634903[curr_items]=>2483[total_items]=>3079[bytes]=>2718136[curr_connections]=>2[total_connections]=>807[connection_structures]=>13[cmd_get]=>9748[cmd_set]=>3096[get_hits]=>5976[get_misses]=>3772[bytes_read]=>3448968[bytes_written]=>2318883[limit_maxbytes]=>33554432),[failed_host:11211]=>)

2.12.Memcache::getStats

2.12.1.说明

arrayMemcache::getStats([string$type[,int$slabid[,int$limit]]])获取最后添加服务器静态信息

2.12.2.参数

type静态信息类型,有效值包括{reset,malloc,maps,cachedump,slabs,items,sizes},依照一定规则协议这个可选参数是为了方便开发人员查看不同类别的信息而输入的标题slabid用于按指定类型联合设置cache堆为有效的片到堆中。缓存堆被被命令绑定到服务器上并被严格的用于调试用途limit用于按指定类型联合设置cache堆为输入的数字所限制的大小到堆,默认值为100

2.12.3.返回值

返回一个服务器静态信息数组,失败时返回FALSE

2.13.Memcache::getServerStatus

2.13.1.说明

intMemcache::getServerStatus(string$host[,int$port])通过输入的host及port来获取相应的服务器信息

2.13.2.参数

host服务器域名或IPport端口号,默认为11211

2.13.3.返回值

返回服务器状态,0为失败,其他情况返回非0数字

2.13.4.范例

<?php/*OOAPI*/$memcache=newMemcache;$memcache->addServer(‘memcache_host‘,11211);echo$memcache->getServerStatus(‘memcache_host‘,11211);/*proceduralAPI*/$memcache=memcache_connect(‘memcache_host‘,11211);echomemcache_get_server_status($memcache,‘memcache_host‘,11211);?>

2.14.Memcache::getVersion

2.14.1.说明

stringMemcache::getVersion(void)获取服务器的版本号信息

2.14.2.返回值

成功返回服务器的版本号字符串,失败返回FALSE

2.14.3.范例

<?php/*OOAPI*/$memcache=newMemcache;$memcache->connect(‘memcache_host‘,11211);echo$memcache->getVersion();/*proceduralAPI*/$memcache=memcache_connect(‘memcache_host‘,11211);echomemcache_get_version($memcache);?>

2.15.Memcache::setCompressThreshold

boolMemcache::setCompressThreshold(int$threshold[,float$min_savings])设置压缩极限

2.15.2.参数

threshold设置控制自动压缩的变量长度的最小值min_saving指定的最低压缩比率,值必须介于0-1之间,默认为0.2代表20%的压缩比率

2.15.3.返回值

成功返回TRUE,失败返回FALSE。

2.15.4.范例

<?php/*OOAPI*/$memcache_obj=newMemcache;$memcache_obj->addServer(‘memcache_host‘,11211);$memcache_obj->setCompressThreshold(20000,0.2);/*proceduralAPI*/$memcache_obj=memcache_connect(‘memcache_host‘,11211);memcache_set_compress_threshold($memcache_obj,20000,0.2);?>

2.16.Memcache::setServerParams

2.16.1.说明

boolMemcache::setServerParams(string$host[,int$port[,int$timeout[,int$retry_interval[,bool$status[,callback$failure_callback]]]]])Memcacheversion2.1.0后增加的函数,运行时设置服务器参数

2.16.2.参数

host服务器域名或IPport端口号,默认为11211timeout超时连接失效的秒数,修改默认值1时要三思,有可能失去所有缓存方面的优势导致连接变得很慢retry_interval服务器连接失败时的重试频率,默认是15秒一次,如果设置为-1将禁止自动重试,当扩展中加载了dynamicallyviadl()时,无论本参数还是常连接设置参数都会失效。每一个失败的服务器在失效前都有独自的生存期,选择后端请求时会被跳过而不服务于请求。一个过期的连接将成功的重新连接或者被标记为失败的连接等待下一次重试。这种效果就是说每一个webserver的子进程在服务于页面时的重试连接都跟他们自己的重试频率有关。status控制服务器是否被标记为online,设置这个参数为FALSE并设置retry_interval为-1可以使连接失败的服务器被放到一个描述不响应请求的服务器池子中,对这个服务器的请求将失败,接受设置为失败服务器的设置,默认参数为TRUE,代表该服务器可以被定义为online。failure_callback失败时的回调函数,函数的两个参数为失败服务器的hostname和port

2.16.3.返回值

成功返回TRUE,失败返回FALSE。

2.16.4.范例

<?phpfunction_callback_memcache_failure($host,$port){print"memcache‘$host:$port‘failed";}/*OOAPI*/$memcache=newMemcache;//Addtheserverinofflinemode$memcache->addServer(‘memcache_host‘,11211,FALSE,1,1,-1,FALSE);//Bringtheserverbackonline$memcache->setServerParams(‘memcache_host‘,11211,1,15,TRUE,‘_callback_memcache_failure‘);/*proceduralAPI*/$memcache_obj=memcache_connect(‘memcache_host‘,11211);memcache_set_server_params($memcache_obj,‘memcache_host‘,11211,1,15,TRUE,‘_callback_memcache_failure‘);?>

2.17.Memcache::increment

2.17.1.说明

intMemcache::increment(string$key[,int$value])给指定key的缓存变量一个增值,如果该变量不是数字时不会被转化为数字,这个增值将会加到该变量原有的数字之上,变量不存在不会新增变量,对于压缩存储的变量不要使用本函数因为相应的取值方法会失败。

2.17.2.参数

key缓存值的键var值,整型将直接存储,其他类型将被序列化存储

2.17.3.返回值

成功返回新的变量值,失败返回FALSE。

2.17.4.范例

<?php/*proceduralAPI*/$memcache_obj=memcache_connect(‘memcache_host‘,11211);/*incrementcounterby2*/$current_value=memcache_increment($memcache_obj,‘counter‘,2);/*OOAPI*/$memcache_obj=newMemcache;$memcache_obj->connect(‘memcache_host‘,11211);/*incrementcounterby3*/$current_value=$memcache_obj->increment(‘counter‘,3);?>

2.18.Memcache::decrement

2.18.2.说明

intMemcache::decrement(string$key[,int$value])给指定key的缓存变量一个递减值,与increment操作类似,将在原有变量基础上减去这个值,该项的值将会在转化为数字后减去,新项的值不会小于0,对于压缩存储的变量不要使用本函数因为相应的取值方法会失败。

2.18.2.参数

key缓存值的键var值,整型将直接存储,其他类型将被序列化存储

2.18.3.返回值

成功返回新的变量值,失败返回FALSE。

2.18.4.范例

<?php/*proceduralAPI*/$memcache_obj=memcache_connect(‘memcache_host‘,11211);/*decrementitemby2*/$new_value=memcache_decrement($memcache_obj,‘test_item‘,2);/*OOAPI*/$memcache_obj=newMemcache;$memcache_obj->connect(‘memcache_host‘,11211);/*decrementitemby3*/$new_value=$memcache_obj->decrement(‘test_item‘,3);?>

2.19.memcache_debug

2.19.1.说明

boolmemcache_debug(bool$on_off)设置memcache的调试器是否开启,值为TRUE或FALSE。受影响于php安装时是否使用了--enable-debug选项,如果使用了该函数才会返回TRUE,其他情况将始终返回FALSE。

2.19.2.参数

on_off设置调试模式是否开启,TRUE为开启,FALSE为关闭

2.19.3.返回值

php安装时如果使使用了--enable-debug选项返回TRUE,否则将返回FALSE。

ending

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  memcache