PHP的内存缓存功能缓存实例
一、对memcached简介
在许多场合,我们都会听到叫memcached,但许多学生都听见了,但没有用它或知道它,但我知道这是很好的。作为一个简单的介绍,memcached是一种高效、快速的,分布式的内存对象缓存系统,它主要用于加快网页动态应用。
二,Memcached安装
第一步是下载缓存,和最新版本1.1.12,可直接从官方网站下载memcached-1.1.12.tar.gz.in此外,Memcached使用libevent,我下载了libevent-1.1a.tar.gz。
接下来是解压,编译,安装libevent-1.1a.tar.gz和memcached-1.1.12.tar.gz,分别:
#焦油计算libevent-1.1a.tar.gz
# CD libevent-1.1a
#。 /配置-前缀= / usr
#使
#安装
# CD。
#焦油计算memcached-1.1.12.tar.gz
# CD memcached-1.1.12
#。 /配置-前缀= / usr
#使
#安装
安装完成后,应在memcached / usr /斌/缓存。
三。运行memcached进程
运行memcached进程是简单的,只是一个命令行,无需修改任何配置文件(没有配置文件可以修改为你):
/ usr /斌/缓存- D - M 128 L P 11211 U httpd 192.168.1.1
参数解释:
D运行memcached的守护进程(daemon)的方式;
M集,Memcached可以使用的内存大小,单位是米;
l设置侦听器的IP地址,如果是这台机器,通常不设置此参数;
p设置监听器的端口,默认值是11211,所以您也不能设置这个参数;
u指定用户,如果当前是root用户,则需要使用此参数指定用户。
当然,还有其他的参数,可以使用memcached,人可以看到。
四、工作原理memcached
首先,将运行在一个或多个服务器守护进程模式,并接受客户端的连接操作,在任何时间。客户端可以是各种语言编写的,与目前已知的客户端API包括Perl、PHP、Python、Ruby / / / # java C C等。PHP在客户端建立与memcached服务连接后,下一步是访问对象,每个访问的对象都有一个唯一的标识符,通过访问操作的关键,保存缓存对象实际上是放置在内存中,而不是存储在缓存中的缓存文件,为什么能如此快速、高效的原因。注意,这些物体是不是持久的,在里面的数据将在服务停止了。
五、PHP如何作为一个memcached客户端
有两种方法可以让PHP作为Memcached客户端,调用缓存的服务对象的访问操作。
首先,PHP有一个扩展名为Memcache。当Linux编译,它需要将启用memcache { = dir }选项。窗下,对php_memcache.dll正面标注移出的使其可。
此外,有一种方法可以避免扩展和重新编译的麻烦,它是用PHP Memcached客户端直接。
本文选择第二种方式,虽然效率会比扩展库稍差,但问题不大。
六、PHP缓存技术的应用实例
首先,下载memcached-client.php。下载后memcached-client.php,你可以用memcached服务通过类memcached这个文件。事实上,代码调用非常简单,所采用的方法主要是增加(),得到(),(),删除(替换)。这些方法描述如下:
添加($,$,$ = 0)
写对象缓存技术,关键是美元的唯一标识符的对象,为val对象数据写入,$ EXP到期时间,单位是秒,默认是没有时间。
获取($密钥)
从缓存中获得对象的数据,这是由对象的唯一标识符密钥获得美元。
替换($键,$,$ = 0)
使用$值代替对象内容在memcached标识符美元关键。参数与添加()方法相同。只有当$对象存在时,它才会工作。
删除($键,$时间= 0)
删除关键在美元memcached标识符的对象,美元和时间作为一个可选的参数,说明多长时间需要等待删除。
以下是该对象的数据与identifier'mykey'is访问一个简单的测试代码。
< PHP
包含 / /缓存的类文件
require_once('memcached-client。php);
选项
$选项=数组(
'服务器' =阵列('192.168.1.1:11211 '), / / memcached服务地址,端口,可以使用多个数组元素代表多个memcached服务
调试= true,调试是打开的
compress_threshold= > 10240, / /压缩过的数据的字节数
持续性= >假 / /是否使用持久连接
);
/ /创建一个缓存对象实例
MC =新memcached美元(美元期权);
使用唯一标识符设置脚本
美元关键= 'mykey;
/ /写入缓存对象
MC ->添加美元(美元的关键,随机字符串);
$ = $;
回声n。str_pad($ MC ->添加(60)、N,'_ ');
var_dump(美元值);
已写入对象数据以替换值。
MC ->取代美元(美元关键,阵列(= > 'haha ','array= > 'xxx '));
$ = $;
回声n。str_pad($ MC ->替换(60)、N,'_ ');
var_dump(美元值);
/ /删除对象缓存
$ >删除($键);
$ = $;
回声n。str_pad($ MC ->删除(60)、N,'_ ');
var_dump(美元值);
>
很简单吗在实际应用中,我们通常存储组数据库查询缓存的结果,并直接从缓存中而不是数据库查询操作得到它,可以很大程度上减少数据库负担。SQL语句的MD5值后()通常作为唯一标识符的关键。其次是使用memcached缓存设置一个数据库查询结果的一个例子(代码片段如下上面的例子代码)。
< PHP
美元'select *从用户的SQL语句;
美元关键= MD5($ SQL); / /缓存对象标识符
{
无需访问数据缓存 / /缓存,用于在数据库查询获得的记录。
回声n。str_pad(读取数据从MySQL。60、N '_)。;
美元mysql_connect conn =('localhost测试,测试的);
mysql_select_db(测试);
结果= mysql_query美元($ SQL);
而($行= mysql_fetch_object($结果))
$数据= $行;
/ /数据库访问保存在缓存中的数据,当用于下次访问。
添加$(键,数据);
{
回声n。str_pad(读取数据从缓存。,60,N '_)。;
}
var_dump($数据);
>
你可以看到,使用缓存后,可以减少数据库连接,查询操作,数据库的负载下,和脚本的运行速度也得到了提高。
之前我写了一篇题为PHP多服务器的会话数据共享的文章,会话是一个数据库储存使用,获得大量的并发服务器负载的时间将是巨大的,往往超出连接mysql的最大数目,使用缓存技术,我们可以很好的解决这个问题,工作原理如下:
用户访问一个网页,是否有查看缓存当前用户会话数据,使用session_id()作为一种独特的标识符;如果数据存在,则直接返回,如果不存在,那么数据库连接、访问会话数据,而这个数据保存到memcached,下次;
在当前的PHP操作结束(或使用session_write_close()),写的my_sess::()方法调用将数据写入数据库。这样,在任何时候都会有数据库操作。这种方法还需要优化。使用一个全局变量,会话数据的用户进入页面,然后在写()与会话数据比较写入相同的数据的方法,不同的数据库连接,在memcached的同时将写入数据库,删除相应的对象,如果是相同的,说会话数据没有变化,所以,你可以不做任何操作,直接回;
那么如何解决用户的会话过期时间呢你还记得添加()方法memcached有过期的时间参数$口吗将此参数值设置为小于会话最大存活时间,并且不要忘记将会话时间扩展到总是在线的用户。这可以在写()方法中解决。通过更新时间和满足需求,我们可以更新数据库数据。
以上是本文的全部内容,希望能对您有所帮助,希望大家多多支持。