php使用memcached详解

日期:2019-10-19编辑作者:www.6165.com

一、memcached 简介

在重重场面,大家都会听到 memcachedphp使用memcached详解。 那几个名字,但广铜仁班只是听过,并不曾用过或实际掌握过,只略知一二它是三个十分不利的东东。这里大概介绍一下,memcached 是便捷、赶快的布满式内部存款和储蓄器对象缓存系统,首要用以加快 WEB 动态应用程序。

二、memcached 安装

php使用memcached详解。率先是下载 memcached 了,方今最新版本是 1.1.12,直接从官网就能够下载到 php使用memcached详解。memcached-1.1.12.tar.gz。除外,memcached 用到了 libevent,笔者下载的是 libevent-1.1a.tar.gz。

接下去是个别将 libevent-1.1a.tar.gzphp使用memcached详解。 和 memcached-1.1.12.tar.gz 解开包、编译、安装:

# tar -xzf libevent-1.1a.tar.gz # cd libevent-1.1a# ./configure --prefix=/usr# make# make install# cd .. # tar -xzf memcached-1.1.12.tar.gz# cd memcached-1.1.12 # ./configure --prefix=/usr# make# make install

设置到位之后,memcached 应该在 /usr/bin/memcached。

三、运行 memcached 守护程序

运行 memcached 守护程序很简短,只需一个命令行就能够,无需修改任何配置文件(也未曾配备文件给您修改 ):

/usr/bin/memcached -d -m 128 -l 192.168.1.1 -p 11211 -u httpd

参数解释:

-d 以守护程序(daemon)方式运转 memcached;-m 设置 memcached 能够选取的内部存款和储蓄器大小,单位为 M; -l 设置监听的 IP 地址,假如是本机的话,日常能够不设置此参数;-p 设置监听的端口,暗许为11211,所以也足以不安装此参数; -u 钦赐顾客,假如当前为 root 的话,供给运用此参数内定顾客。

理之当然,还大概有别的参数能够用,man memcached 一下就足以见见了。

四、memcached 的干活原理

第一 memcached 是以守护程序方法运转于二个或多个服务器中,任何时候接受客商端的总是操作,顾客端能够由各类语言编写,近年来已知的客户端 API 包涵 Perl/PHP/Python/Ruby/Java/C#/C 等等。PHP 等顾客端在与 memcached 服务建构连接之后,接下去的业务正是存取对象了,各样被存取的对象都有贰个独一的标志符 key,存取操作均通过这几个 key 举办,保存到 memcached 中的对象实际是放置内部存款和储蓄器中的,实际不是保存在 cache 文件中的,那也是怎么 memcached 能够这么高效急速的始末。注意,这么些目的并非百折不挠的,服务甘休今后,里边的数码就能够扬弃。

五、PHP 怎么着作为 memcached 客商端

有二种方法能够使 PHP 作为 memcached 客户端,调用 memcached 的劳动进行对象存取操作。

率先种,PHP 有四个叫做 memcache 的强大,Linux 下编写翻译时须求带上 –enable-memcache[=DIR] 选项,Window 下则在 php.ini 中去掉 php_memcache.dll 前面包车型大巴注释符,使其可用。

除了,还应该有一种方法,能够规避扩张、重新编译所带来的麻烦,那便是直接使用 php-memcached-client。

正文选择第三种办法,尽管功用会比增加库稍差相当少,但难题相当小。

六、PHP memcached 应用示范

首先 下载 memcached-client.php,在下载了 memcached-client.php 之后,就足以经过这些文件中的类“memcached”对 memcached 服务举办操作了。其实代码调用特别简单,首要会用到的措施有 add()、get()、replace() 和 delete(),方法求证如下:

add ($key, $val, $exp = 0)

往 memcached 中写入对象,$key 是目的的独一标记符,$val 是写入的靶子数据,$exp 为过期光阴,单位为秒,默以为不限制期限间;

get ($key)

从 memcached 中收获对象数据,通过对象的独步天下标志符 $key 获取;

replace ($key, $value, $exp=0)

采纳 $value 替换 memcached 中标记符为 $key 的靶子内容,参数与 add() 方法一样,独有 $key 对象存在的意况下才会起效果;

delete ($key, $time = 0)

剔除 memcached 中标记符为 $key 的靶子,$time 为可选参数,表示删除在此以前须求拭目以俟多久。

上面是一段轻便的测量试验代码,代码中对标记符为 'mykey' 的目的数据实行存取操作:

<?php
//    包含 memcached 类文件
require_once('memcached-client.php');
//    选项设置
$options = array(
    'servers' => array('192.168.1.1:11211'), //memcached 服务的地址、端口,可用多个数组元素表示多个 memcached 服务
    'debug' => true,  //是否打开 debug
    'compress_threshold' => 10240,  //超过多少字节的数据时进行压缩
    'persistant' => false  //是否使用持久连接
    );
//    创建 memcached 对象实例
$mc = new memcached($options);
//    设置此脚本使用的唯一标识符
$key = 'mykey';
//    往 memcached 中写入对象
$mc->add($key, 'some random strings');
$val = $mc->get($key);
echo "n".str_pad('$mc->add() ', 60, '_')."n";
var_dump($val);
//    替换已写入的对象数据值
$mc->replace($key, array('some'=>'haha', 'array'=>'xxx'));
$val = $mc->get($key);
echo "n".str_pad('$mc->replace() ', 60, '_')."n";
var_dump($val);
//    删除 memcached 中的对象
$mc->delete($key);
$val = $mc->get($key);
echo "n".str_pad('$mc->delete() ', 60, '_')."n";
var_dump($val);
?>

是或不是很简短,在事实上行使中,平日会把数据库查询的结果集保存到 memcached 中,下一次访问时直接从 memcached 中得到,而不再做数据库查询操作,那样能够在相当大程度上减轻数据库的承受。平常会将 SQL 语句 md5() 之后的值作为独一标记符 key。下边是一个用到 memcached 来缓存数据库查询结果集的演示(此代码片段紧接上面的示范代码):

<?php
$sql = 'SELECT * FROM users';
$key = md5($sql);   //memcached 对象标识符
if ( !($datas = $mc->get($key)) ) {
    //    在 memcached 中未获取到缓存数据,则使用数据库查询获取记录集。
    echo "n".str_pad('Read datas from MySQL.', 60, '_')."n";
    $conn = mysql_connect('localhost', 'test', 'test');
    mysql_select_db('test');
    $result = mysql_query($sql);
      while ($row = mysql_fetch_object($result))
        $datas[] = $row;
    //    将数据库中获取到的结果集数据保存到 memcached 中,以供下次访问时使用。
    $mc->add($key, $datas);
} else {
      echo "n".str_pad('Read datas from memcached.', 60, '_')."n";
}
var_dump($datas);
?>

能够看看,使用 memcached 之后,能够削减数据库连接、查询操作,数据库负载下来了,脚本的周转速度也拉长了。

事先本身早已写过一篇名字为《PHP 实现多服务器分享 SESSION 数据》文章,文中的 SESSION 是使用数据库保存的,在产出国访问谈量大的时候,服务器的负载会相当的大,平日会高于 MySQL 最安卡拉接数,利用 memcached,大家得以很好地消除那一个难点,专门的工作原理如下:

客商访谈网页时,查看 memcached 中是还是不是有眼下顾客的 SESSION 数据,使用 session_id() 作为独一标志符;倘诺数额存在,则一直回到,假设不设有,再进行数据库连接,获取 SESSION 数据,并将此数量保存到 memcached 中,供后一次选拔; 当前的 PHP 运维结束(或行使了 session_write_close())时,会调用 My_Sess::write() 方法,将数据写入数据库,那样的话,每一遍照旧会有数据库操作,对于那么些艺术,也急需展开优化。使用三个全局变量,记录顾客走入页面时的 SESSION 数据,然后在 write() 方法内相比较此数额与想要写入的 SESSION 数据是不是一律,不一致才进行数据库连接、写入数据库,同一时候将 memcached 中对应的对象删除,若是一样的话,则代表 SESSION 数据未改换,那么就足以不做任何操作,直接回到了; 那么客户 SESSION 过期时间怎么化解呢?记得 memcached 的 add() 方法有个过期时间参数 $exp 吗?把这一个参数值设置成小于 SESSION 最大存活时间就能够。其他别忘了给那个平昔在线的客商一而再 SESSION 时间长度,这几个能够在 write() 方法中国化学工业进出口总企业解,通过判定时间,切合条件则更新数据库数据。

本文由新金沙国际手机版发布于www.6165.com,转载请注明出处:php使用memcached详解

关键词:

段王爷Dear丨微信创业如何选择合适的内容平台进

平台装修 朋友圈:(3346100) 运营升级 段王爷Dear丨微信创业如何选择合适的内容平台进行营销推广。段王爷Dear丨微...

详细>>

前端入门书&前端学习网站

前端入门书前端学习网站。《JavaScript DOM编程艺术》学习JavaScript和DOM开发的必读之作。 《Node.js开发指南》:不错的...

详细>>

这样学英语三个月超过你过去学三年!!

正文作者八年间从四级勉强及格到高等口译笔试210,口试232。找工作面试时给其口试的鬼子考官听了一分钟就说你的...

详细>>

如何做好微信公众号的运营推广?

如何做好微信公众号的运营推广?。原创内容,侵权必究,授权转载标明文章来自微信公众号(安化本地信息网)可...

详细>>