php的Memcache方法介绍及应用实例.doc_第1页
php的Memcache方法介绍及应用实例.doc_第2页
php的Memcache方法介绍及应用实例.doc_第3页
php的Memcache方法介绍及应用实例.doc_第4页
php的Memcache方法介绍及应用实例.doc_第5页
已阅读5页,还剩13页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

使用Memcache在PHP中调试方法的介绍及应用 如果我们在网络开发中,特别是大访问量的web项目开发中,为了提高响应速度,减少数据查询运算,那么我们都会选用memcahce。首先我们必须要安装,接下来如何使用memcache,在这里介绍下在linux下安装和windows下安装如下及配置:一、 linux下的Memcache安装:1.下载memcache的linux版本,注意 memcached 用 libevent 来作事件驱动,所以要先安装有 libevent。2. 安装 pecl:memcache。用 pecl 命令行工具安装:pecl install memcache或直接从源码安装:phpize./configuremakemake install二、Windows下的Memcache安装: 1. 下载memcache的windows稳定版,解压放某个盘下面,比如在c:memcached2. 在终端(也即cmd命令界面)下输入 c:memcachedmemcached.exe -d install 安装3. 再输入: c:memcachedmemcached.exe -d start 启动。NOTE: 以后memcached将作为windows的一个服务每次开机时自动启动。这样服务器端已经安装完毕了。4.下载/ext.php/php_memcache.dll,请自己查找对应的php版本的文件5. 在C:winntphp.ini 加入一行 extension=php_memcache.dll6.重新启动Apache,然后查看一下phpinfo,如果有memcache,那么就说明安装成功!三、memcached的基本设置:-p 监听的端口-l 连接的IP地址, 默认是本机-d start 启动memcached服务-d restart 重起memcached服务-d stop|shutdown 关闭正在运行的memcached服务-d install 安装memcached服务-d uninstall 卸载memcached服务-u 以的身份运行 (仅在以root运行的时候有效)-m 最大内存使用,单位MB。默认64MB-M 内存耗尽时返回错误,而不是删除项-c 最大同时连接数,默认是1024-f 块大小增长因子,默认是1.25-n 最小分配空间,key+value+flags默认是48-h 显示帮助四、php.ini中的配置:Memcache一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。是否在遇到错误时透明地向其他服务器进行故障转移。memcache.allow_failover = On接受和发送数据时最多尝试多少个服务器,只在打开memcache.allow_failover时有效。memcache.max_failover_attempts = 20数据将按照此值设定的块大小进行转移。此值越小所需的额外网络传输越多。如果发现无法解释的速度降低,可以尝试将此值增加到32768。memcache.chunk_size = 8192连接到memcached服务器时使用的默认TCP端口。memcache.default_port = 11211控制将key映射到server的策略。默认值standard表示使用先前版本的老hash策略。设为consistent可以允许在连接池中添加/删除服务器时不必重新计算key与server之间的映射关系。memcache.hash_strategy = standard; 控制将key映射到server的散列函数。默认值crc32使用CRC32算法,而fnv则表示使用FNV-1a算法。 FNV-1a比CRC32速度稍低,但是散列效果更好。memcache.hash_function = crc32memcache也可以作为session的存储模块,具体参看:memcache PHP 的 session.save_handler. 1. $memcache = new Memcache; 2. $memcache-connect(localhost, 11211) or die (Could not connect); 3. 4. $version = $memcache-getVersion(); 5. echo Servers version: .$version.n; 6. 7. $tmp_object = new stdClass; 8. $tmp_object-str_attr = test; 9. $tmp_object-int_attr = 123; 10. 11. $memcache-set(key, $tmp_object, false, 10) or die (Failed to save data at the server); 12. echo Store data in the cache (data will expire in 10 seconds)n; 13. 14. $get_result = $memcache-get(key); 15. echo Data from the cache:n; 16. 17. var_dump($get_result); 我们已经安装好了,也配置好了memcache,现在接下来如何调试memcache.来做个测试。先搞个表:create table t(id char(36) not null primary key, username varchar(20) not null);插点数据:insert into t values (uuid(),Livia),(uuid(),Lucy),(uuid(),Sivia),(uuid(),david);写个简单脚本测试一下。connect(1, 11211); $mem-set($sql,$test_key, MEMCACHE_COMPRESSED, 600);print_r($mem-get($sql); ?看看结果出来了。C:php -f d:/lamp/web2/phpinfo.php Array ( 0 = Array ( id = d8f1ec2a-c033-11dd-bd1a-002215c94322 username = david )1 = Array ( id = d8f1eb9e-c033-11dd-bd1a-002215c94322 username = Sivia )2 = Array ( id = d8f1ea9a-c033-11dd-bd1a-002215c94322 username = Lucy )3 = Array ( id = d8f1e658-c033-11dd-bd1a-002215c94322 username = Livia )现在我们已经介绍Memcache安装,不再赘述。再次着重介绍memcache的一些常用方法。Memcache:add / 添加一个值,如果已经存在,则返回falseMemcache: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 / 在运行时修改服务器的参数下面是一些简单的用法实例,仅供参考: connect(, 12000); /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,第二个参数可选,表示删除延迟的时间。$mem-delete(test,60);? 肖承湖PHP缓存应用:PHP MEMCACHE 详解2010-01-28 09:38:44 来源:中国站长站综合 【大 中 小】 评论:0 条 我要投稿 收藏本文 分享至微博 站长交易()帮站长赚钱 虚拟主机评测+IDC导航=IDC123.COMMemcache函数库是在PECL(PHPExtensionCommunityLibrary)中,主要作用是搭建大容量的内存数据的临时存放区域,在分布式的时候作用体现的非常明显,否则不建议使用。在ubuntu上安装完运行的时候报错:/usr/local/memcached/bin/memcached: error while loading shared libraries: libevent-1.4.so.2: cannot open shared object file: No such file or directory 按照:libeven、memcached、libmemcache安装中的方法,使用:sudo ln -s /usr/local/lib/libevent-1.4.so.2 /usr/lib/libevent-1.4.so.2可以修正这个BUG通过新得立安装php的memcached模块,注销/etc/php5/conf.d/memcached.ini里面的“;”,重启apache,调用phpinfo()出现memcached的信息。connect(localhost, 11211) or die (Could not connect); $version = $memcache-getVersion(); echo Servers version: .$version.n; ?1. connect(localhost,11211)ordie(Couldnotconnect); 4. print_r($memcache-getStats(); 5. /* 6. *Array 7. *( 8. *pid=8052 9. *uptime=9205 10. *time=1205898428 11. *version=1.2.5 12. *pointer_size=32 13. *rusage_user=0.008000 14. *rusage_system=0.000000 15. *curr_items=1 16. *total_items=17 17. *bytes=57 18. *curr_connections=2 19. *total_connections=15 20. *connection_structures=3 21. *cmd_get=9 22. *cmd_set=23 23. *get_hits=5 24. *get_misses=4 25. *evictions=0 26. *bytes_read=671 27. *bytes_written=850 28. *limit_maxbytes=10485760 29. *threads=1 30. *) 31. */ 32. ?01.connect(localhost, 11211) or die (Could not connect); 04.$memcache-set( name, leo, 0, 30); 05.if(!$memcache-add( name, susan, 0, 30) 06. 07. echo susan is exist; 08.; 09.$memcache-replace( name, lion, 0, 300); 10.echo $memcache-get( name); 11.$memcache-delete( name, 5); 12.? 01.addServer(16, 11211); 07.$memcache-setServerParams(16, 11211, 1, 15, true, 08. 09._callback_memcache_failure); 10.echo $memcache-getServerStatus(16, 11211); 11.? 01.connect(localhost, 11211); 04.$memcache-set(test_item, 8); 05.$memcache-increment(test_item, 4); 06.echo $memcache-decrement(test_item, 7); 07./ 显示 5 08.? /usr/local/bin/memcached-d-m10-uroot-l-p11211-c256-P/tmp/memcached.pidPHP缓存应用:PHP MEMCACHE 详解(2)2010-01-28 09:38:44 来源:中国站长站综合 【大 中 小】 评论:0 条 我要投稿 收藏本文 分享至微博 站长交易()帮站长赚钱 虚拟主机评测+IDC导航=IDC123.COMmemcached的服务正式启动01.Memcache:add 添加一个值,如果已经存在,则返回false 02.Memcache:addServer 添加一个可供使用的服务器地址 03.Memcache:close 关闭一个Memcache对象 04.Memcache:connect 创建一个Memcache对象 05.memcache_debug 控制调试功能 06.Memcache:decrement 对保存的某个key中的值进行减法操作 07.Memcache:delete 删除一个key值 08.Memcache:flush 清除所有缓存的数据 09.Memcache:get 获取一个key值 10.Memcache:getExtendedStats 获取进程池中所有进程的运行系统统计 11.Memcache:getServerStatus 获取运行服务器的参数 12.Memcache:getStats 返回服务器的一些运行统计信息 13.Memcache:getVersion 返回运行的Memcache的版本信息 14.Memcache:increment 对保存的某个key中的值进行加法操作 15.Memcache:pconnect 创建一个Memcache的持久连接对象 16.Memcache:replace R对一个已有的key进行覆写操作 17.Memcache:set 添加一个值,如果已经存在,则覆写 18.Memcache:setCompressThreshold 对大于某一大小的数据进行压缩 19.Memcache:setServerParams 在运行时修改服务器的参数建议用面向对象的方式来测试这个库:Memcache:getVersion方法的作用是返回运行的Memcache的版本信息。 Memcache:getStats 方法的作用是返回服务器的一些运行统计信息。Memcache:getStats方法有三个参数,第一个参数表示要求返回的类型:reset, malloc, maps, cachedump, slabs, items, sizes;第二个参数和第三个参数是在第一个参数设置“cachedump”时使用的。Memcache:getExtendedStats方法的作 用是获取进程池中所有进程的运行系统统计。memcache_debug()函数的作用是控制调试功能,前提是php在编译的时候使用了enable-debug选项,否则这个函数不会有作用。Memcache:addServer 方法的作用是添加一个可供使用的服务器地址,Memcache:addServer方法有8个参数,除了第一个参数意外,其他都是可选的,第一个参数表 示服务器的地址,第二个参数表示端口,第三个参数表示是否是一个持久连接,第四个参数表示这台服务器在所有服务器中所占的权重,第五个参数表示连接的持续 时间,第六个参数表示连接重试的间隔时间,默认为15,设置为-1表示不进行重试,第七个参数用来控制服务器的在线状态,第8个参数允许设置一个回掉函数 来处理错误信息。Memcache:setServerParams方法的作用是在运行时修改服务器的参数,Memcache:setServerParams 方法有六个参数,Memcache:addServer方法少了第三和第四个参数。 Memcache:getServerStatus方法的作用是获取运行服务器的参数,两个参数分别表示的地址和端口。Memcache:flush方法的作用是清除所有缓存的数据,但是不会削去使用的内存空间。Memcache:increment方法的作用是对保存的某个key中的值进行加法操作,Memcache:decremen方法的作用是对保存的某个key中的值进行减法操作。PHP MEMCACHE高级缓存应用详解 文章录入:7747.Net责任编辑:7747.Net 269 【字体:小 大】Memcache函数库是在 PECL(PHP Extension Community Library)中,主要作用是搭建大容量的内存数据的临时存放区域,在分布式的时候作用体现的非常明显,否则不建议使用。 本人在ubuntu上安装完运行的时候报错:/usr/local/memcached/bin/memcached: error while loading shared libraries: libevent-1.4.so.2: cannot open shared object file: No such file or directory按照:libeven、memcached、libmemcache安装中的方法,使用:sudo ln -s /usr/local/lib/libevent-1.4.so.2 /usr/lib/libevent-1.4.so.2可以修正这个BUG通过新得立安装php的memcached模块,注销/etc/php5/conf.d/memcached.ini里面的“;”,重启apache,调用phpinfo()出现memcached的信息执行:connect(localhost,11211)ordie(Couldnotconnect); $version=$memcache-getVersion(); echoServersversion:.$version. n; ? connect(localhost,11211)ordie(Couldnotconnect); print_r($memcache-getStats(); /* *Array *( *pid=8052 *uptime=9205 *time=1205898428 *version=1.2.5 *pointer_size=32 *rusage_user=0.008000 *rusage_system=0.000000 *curr_items=1 *total_items=17 *bytes=57 *curr_connections=2 *total_connections=15 *connection_structures=3 *cmd_get=9 *cmd_set=23 *get_hits=5 *get_misses=4 *evictions=0 *bytes_read=671 *bytes_written=850 *limit_maxbytes=10485760 *threads=1 *) */ ? connect(localhost,11211)ordie(Couldnotconnect); $memcache-set(name,leo,0,30); if(!$memcache-add(name,susan,0,30) echosusanisexist; ; $memcache-replace(name,lion,0,300); echo$memcache-get(name); $memcache-delete(name,5); ? addServer(16,11211); $memcache-setServerParams(16,11211,1,15,true, _callback_memcache_failure); echo$memcache-getServerStatus(16,11211); ? connect(localhost,11211); $memcache-set(test_item,8); $memcache-increment(test_item,4); echo$memcache-decrement(test_item,7); /显示5 ? /usr/local/bin/memcached -d -m 10 -u root -l -p 11211 -c 256 -P /tmp/memcached.pidmemcached的服务正式启动Memcache:add 添加一个值,如果已经存在,则返回falseMemcache: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 R对一个已有的key进行覆写操作Memcache:set 添加一个值,如果已经存在,则覆写Memcache:setCompressThreshold 对大于某一大小的数据进行压缩Memcache:setServerParams 在运行时修改服务器的参数 建议用面向对象的方式来测试这个库:Memcache:getVersion方法的作用是返回运行的Memcache的版本信息。Memcache:getStats 方法的作用是返回服务器的一些运行统计信息。Memcache:getStats方法有三个参数,第一个参数表示要求返回的类型:reset, malloc, maps, cachedump, slabs, items, sizes;第二个参数和第三个参数是在第一个参数设置为“cachedump”时使用的。Memcache:getExtendedStats方法的作用是获取进程池中所有进程的运行系统统计。 Memcache:connect方法的作用是创建一个Memcache对象。Memcache:pconnect方法的作用是创建一个Memcache的持久连接对象。Memcache:close方法的作用是关闭一个Memcache对象。Memcache:set 方法的作用是添加一个值,Memcache:set方法有四个参数,第一个参数是key,第二个参数是value,第三个参数可选,表示是否压缩保存,第四个参数可选,用来设置一个过期自动销毁的时间。Memcache:add方法的作用和Memcache:set方法类似,区别是如果 Memcache:add方法的返回值为false,表示这个key已经存在,而Memcache:set方法则会直接覆写。 Memcache:get方法的作用是获取一个key值,Memcache:get方法有一个参数,表示key。Memcache:replace 方法的作用是对一个已有的key进行覆写操作,Memcache:replace方法有四个参数,作用和Memcache:set方法的相同。 Memcache:delete方法的作用是删除一个key值,Memcache:delete方法有两个参数,第一个参数表示key,第二个参数可选,表示删除延迟的时间。memcache_debug()函数的作用是控制调试功能,前提是php在编译的时候使用了enable-debug选项,否则这个函数不会有作用。Memcache:addServer 方法的作用是添加一个可供使用的服务器地址,Memcache:addServer方法有8个参数,除了第一个参数意外,其他都是可选的,第一个参数表示服务器的地址,第二个参数表示端口,第三个参数表示是否是一个持久连接,第四个参数表示这台服务器在所有服务器中所占的权重,第五个参数表示连接的持续时间,第六个参数表示连接重试的间隔时间,默认为15,设置为-1表示不进行重试,第七个参数用来控制服务器的在线状态,第8个参数允许设置一个回掉函数来处理错误信息。Memcache:setServerParams方法的作用是在运行时修改服务器的参数,Memcache:setServerParams方法有六个参数,Memcache:addServer方法少了第三和第四个参数。 Memcache:getServerStatus方法的作用是获取运行服务器的参数,两个参数分别表示的地址和端口。Memcache:flush方法的作用是清除所有缓存的数据,但是不会削去使用的内存空间。Memcache:increment方法的作用是对保存的某个key中的值进行加法操作,Memcache:decremen方法的作用是对保存的某个key中的值进行减法操作。 Discuz!的Memcache缓存实现前言: 在PHP+MySQL架构的站点中,本文重点从MySQL的角度去分析如何使Discuz!论坛(或者类似的PHP+MySQL架构的程序)应对大访问 量。同时给出一些使用Memcache去减轻MySQL压力的建议。其中很多数据是个人测试的结果,如有不同意见,敬请留言告之。另外由于个人思维的问 题,行文比较跳跃,特此声明! 系统分析: 单纯的从MySQL的角度出发,单台MySQL的数据库负载到每天上亿次的操作(每秒大概1100次MySQL操作,然后乘以86400)应该不是非常困 难的事情。按照这个数据也就是说一个单MySQL服务器的论坛来说可以跑到2千万PV是不成问题的,我相信国内绝大部分的论坛都不可能做到每天2千万的 PV,但实际情况并不是如此。当论坛PV超过百万的时候一台WEB早已经不堪重负了。 就我手头的一些数据显示,目前的Discuz!论坛的基本服务器架构是前面Squid顶着,后面才是一台DB在撑着。这种架构中,web服务器压力增大可 以通过并行增加服务器解决,而MySQL压力却无处释放,在不考虑MySQL官方服务的情况下,我们通过合理的利用Memcache是可以达到减轻 MySQL服务器负载的。 可能会有朋友说我们可以对数据表进行分表(注:此处分表是指通过PHP程序去分表,比如pw,dv的分表)处理,但是当前的情况是一台DB服务器已经不能 支撑当前的数据处理了,通过PHP对MySQL进行的分表依然不能减轻MySQL的负载。(注:本段文字针对已经成型的系统,如果是独立开发的系统在架构 前期就进行数据的同步分区还是不错的。) 还可能有朋友会说利用MySQL的主从构架,如果你提出这个问题,我就很明确的告诉你,回去看看手册吧。在Mysql Master/Slave 模式中,Slave主要是来备份数据的,只有当Master出现故障时,Slave才会接过Master的服务,对外部请求进行处理,直到Master恢 复正常。就是说:在Master/Slave中,要么是Master在服务,要么是Slave在服务,不会Master/Slave同时提供服务。使用 MySQL主从依然不能有效的降低MySQL的负载。 或许你又会问我为什么不使用MySQL集群(MySQL Cluster),那可是白花花的银子啊,同等金钱的付出下,获得最大的收益才是王道。PS:说句题外话,MySQL手册中将MySQL集群解释为MySQL簇,不习惯。 其实在MySQL5.1中的MySQL分区(MySQL Partition)是个很好的东西,它允许根据可以设置为任意大小的规则,跨文件系统分配单个表的多个部分。实际上,表的不同部分在不同的位置被存储为 单独的表。我认为这个才是当前情况下,最积极有效的降低MySQL负载的解决方法之一。但是遗憾的是,这种MySQL分区的方式我个人没有使用过的经历, 也不见有相当充分的案例表明它是稳定的或者不稳定的。所以我还在徘徊中。如果你知道,请麻烦告之!有朋友说腾讯是在用MySQL分区,但是遗憾的是我没有 得到确切的数据。 好了分析总结了这么多种降低MySQL负载的方式之后,在用户环境需求等特定条件下,我得出结论在当前情况下,缓解Discuz!论坛的MySQL负载比较有效的方法就是使用Memcache! 使用Memcache的理由: 1.Web Server(Lighttpd、Nginx据说都比Apache效率高好多,大家可以试用下)对CPU要求高,对内存要求低;而Memcached Server是对CPU要求低,对内存要求高,所以可以搭配使用。在对前端的Web Server上安装Memcached Server是可行的。 2.金钱金钱金钱,最少的付出,获得最大的收益。 3.简单简单简单,对于一个架构合理的系统来说,添加Memcache的支持可能只是一个批量处理文件的过程 Discuz!使用Memcache 1.在config.inc.php中增加 $memcachehost = ; $memcacheport = 11211; $memcachelife = 60; 2.在include/common.inc.php中 $mem = new Memcache; $mem-connect($memcachehost, $memcacheport); 3.修改include/db_mysql.class.php中的fetch_array、query这两个方法,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论