源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

PHP Memcached应用实现代码

  • 时间:2020-07-01 20:09 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:PHP Memcached应用实现代码
[b][i]肖理达 (KrazyNio AT hotmail.com), 2006.04. 06, 转载请注明出处[/i][/b] [b]一、memcached 简介[/b] 在很多场合,我们都会听到 [url=http://www.danga.com/memcached/]memcached[/url] 这个名字,但很多同学只是听过,并没有用过或实际了解过,只知道它是一个很不错的东东。这里简单介绍一下,memcached 是高效、快速的分布式内存对象缓存系统,主要用于加速 WEB 动态应用程序。 [b]二、memcached 安装[/b] 首先是下载 memcached 了,目前最新版本是 1.1.12,直接从官方网站即可下载到 [url=http://www.danga.com/memcached/dist/memcached-1.1.12.tar.gz]memcached-1.1.12.tar.gz[/url]。除此之外,memcached 用到了 [url=http://monkey.org/~provos/libevent/]libevent[/url],我[url=http://monkey.org/~provos/libevent-1.1a.tar.gz]下载的是 libevent-1.1a.tar.gz[/url]。 接下来是分别将 libevent-1.1a.tar.gz 和 memcached-1.1.12.tar.gz 解开包、编译、安装:
[url=http://www.php.net/manual/en/ref.memcache.php]memcache 的扩展[/url],Linux 下编译时需要带上 [i]–enable-memcache[=DIR][/i] 选项,Window 下则在 php.ini 中去掉 php_memcache.dll 前边的注释符,使其可用。 除此之外,还有一种方法,可以避开扩展、重新编译所带来的麻烦,那就是直接使用 [url=http://wikipedia.sourceforge.net/doc/memcached-client/_includes_memcached-client_php.html]php-memcached-client[/url]。 本文选用第二种方式,虽然效率会比扩展库稍差一些,但问题不大。 [b]四、PHP memcached 应用示例[/b] 首先 [url=http://www.nioxiao.com/wp-content/uploads/2006/04/memcached-client.zip]下载 memcached-client.php[/url],在下载了 memcached-client.php 之后,就可以通过这个文件中的类“memcached”对 memcached 服务进行操作了。其实代码调用非常简单,主要会用到的方法有 add()、get()、replace() 和 delete(),方法说明如下: [code]add ($key, $val, $exp = 0)[/code] 往 memcached 中写入对象,$key 是对象的唯一标识符,$val 是写入的对象数据,$exp 为过期时间,单位为秒,默认为不限时间; [code]get ($key)[/code] 从 memcached 中获取对象数据,通过对象的唯一标识符 $key 获取; [code]replace ($key, $value, $exp=0)[/code] 使用 $value 替换 memcached 中标识符为 $key 的对象内容,参数与 add() 方法一样,只有 $key 对象存在的情况下才会起作用; [code]delete ($key, $time = 0)[/code] 删除 memcached 中标识符为 $key 的对象,$time 为可选参数,表示删除之前需要等待多长时间。 下面是一段简单的测试代码,代码中对标识符为 'mykey' 的对象数据进行存取操作:
[url=http://www.nioxiao.com/sharing-php-session-data-between-servers/]《PHP 实现多服务器共享 SESSION 数据》[/url]文章,文中的 SESSION 是使用数据库保存的,在并发访问量大的时候,服务器的负载会很大,经常会超出 MySQL 最大连接数,利用 memcached,我们可以很好地解决这个问题,工作原理如下: [list] [*]用户访问网页时,查看 memcached 中是否有当前用户的 SESSION 数据,使用 session_id() 作为唯一标识符;如果数据存在,则直接返回,如果不存在,再进行数据库连接,获取 SESSION 数据,并将此数据保存到 memcached 中,供下次使用; [/*][*]当前的 PHP 运行结束(或使用了 [url=http://php.liukang.com/manual/en/function.session-write-close.php]session_write_close()[/url])时,会调用 My_Sess::write() 方法,将数据写入数据库,这样的话,每次仍然会有数据库操作,对于这个方法,也需要进行优化。使用一个全局变量,记录用户进入页面时的 SESSION 数据,然后在 write() 方法内比较此数据与想要写入的 SESSION 数据是否相同,不同才进行数据库连接、写入数据库,同时将 memcached 中对应的对象删除,如果相同的话,则表示 SESSION 数据未改变,那么就可以不做任何操作,直接返回了; [/*][*]那么用户 SESSION 过期时间怎么解决呢?记得 memcached 的 add() 方法有个过期时间参数 $exp 吗?把这个参数值设置成小于 SESSION 最大存活时间即可。另外别忘了给那些一直在线的用户延续 SESSION 时长,这个可以在 write() 方法中解决,通过判断时间,符合条件则更新数据库数据。 [/*][/list] [b]五、相关资源[/b] [list] [*][url=http://www.danga.com/memcached/]memcached 官方网站[/url] [/*][*][url=http://wikipedia.sourceforge.net/doc/memcached-client/_includes_memcached-client_php.html]PHP memcached client[/url] [/*][*][url=http://www.nioxiao.com/wp-content/uploads/2006/04/memcached-client.zip]下载 memcached-client.php[/url] [/*][/list]
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部