代码如下:

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' 的对象数据进行存取操作:

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 来缓存数据库查询结果集的示例(此代码片段紧接上边的示例代码):

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() 方法中解决,通过判断时间,符合条件则更新数据库数据。

以上内容是小编给大家介绍的PHP如何使用Memcached,希望对大家有所帮助!

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

php如何使用memcached,PHP如何使用Memcached_PHP相关推荐

  1. php java memcached_php和java的memcached使用的兼容性问题解决过程

    4.0. 增加spymemcached依赖 net.spyspymemcached2.12.0 4.1. 配置memcached的ip地址 分别在dev,test,idc,prod的app-confi ...

  2. 常用的高性能 KV 存储 Redis、Memcached、etcd、Zookeeper 区别

    1. 什么是 KV 存储 KV 是 Key-Value 的缩写,KV 存储也叫键值对存储.简单来说,它是利用 Key 做索引来实现数据的存储.修改.查询和删除功能. 常用的高性能 KV 存储主要有 R ...

  3. Magent搭建Memcached集群

    原文地址:http://ultrasql.blog.51cto.com/9591438/1636374 Memcached集群介绍 由于Memcached服务器与服务器之间没有任何通讯,并且不进行任何 ...

  4. memcached和redis的区别和应用场景

    一:特性和对比 1.性能上: 性能上都很出色,具体到细节,由于Redis只使用单核,而Memcached可以使用多核,所以平均每一个核上Redis在存储小数据时比 Memcached性能更高.而在10 ...

  5. 为何Redis要比Memcached好用(转)

    转载链接:http://blog.csdn.net/renfufei/article/details/40598889 GitHub版本地址: https://github.com/cncounter ...

  6. Memcached安装使用和源码调试

    memcached官网:http://memcached.org/ 一.安装 下载 # wget http://www.memcached.org/files/memcached-1.4.25.tar ...

  7. memcache和memcached安装

    首先要明确  memcache不是memcached 第一步安装libevent #wget  https://github.com/downloads/libevent/libevent/libev ...

  8. 分享memcache和memcached安装过程

    Memcache是什么? Memcache是一个自由和开放源代码.高性能.分配的内存对象缓存系统.用于加速动态web应用程序,减轻数据库负载. 它可以应对任意多个连接,使用非阻塞的网络IO.由于它的工 ...

  9. Memcached安装以及PHP的调用

    一:安装libevent 由于memcached安装时,需要使用libevent类库,所以先安装libevent 1.下载 #wget   http://www.monkey.org/~provos/ ...

  10. Linux(centOS)手动安装Apache+MySQL+PHP+Memcached+Nginx原创无错版

    最后更新时间:2012.3.21 =================== 第一步:Apache安装(已更新到2.2.22) =================== 下载 去 http://www.ap ...

最新文章

  1. ❤️手撕这十道HiveSQL题还不能吊打面试官,却能保你不被吊打❤️【推荐收藏】
  2. oracle 查询空值异常,Oracle中的NULL
  3. 阿里达摩院百万大奖评选开启!这次人人都能给青年科学家当伯乐
  4. vs2017 js cordova + dotnet core 开发app
  5. SpringMVC——处理方法返回值的可选类型
  6. ffmpeg播放器 android,Android 调用ffmpeg 播放器开发(一)
  7. jquery ready() 与window onload的区别
  8. 简单了解一下ArcPy
  9. idea Translation插件翻译失败。TKK: 更新 TKK 失败,请检查网络连接
  10. 解决VMware虚拟机宿主机与虚拟机通讯慢
  11. 【一】从.WAV文件中提取语音的fbank特征
  12. 双机热备 ip地址_双机热备软件哪个好?双机热备软件推荐
  13. 麒麟座mini学习笔记之云端查看数据流
  14. Mac tips - 打开【键盘重复按键】功能
  15. 如何解决打开浏览器跳转MSN中国页面
  16. 移动互联应用开发基础知识简答
  17. 解析法实现多元线性回归的实例
  18. 程序员应知必会的思维模型之 25 普特定律 (Putt‘s Law)
  19. 如果爱忘了那就让一切随风去吧
  20. mpush 搭建消息服务器,MPUSH消息推送服务器搭建

热门文章

  1. 在一个centos6上安装多个不同版本python
  2. CentOS 7搭建tengine+php+mariadb环境并安装discuz论坛
  3. DataGridView - Column named XXX cannot be found
  4. Redhat linux 5 Server相关介绍
  5. ISA 2000与ISA 2004的区别
  6. spring @POSTConstruction注解的作用
  7. 0084-CYX的异己
  8. ASP.NET 2.0 Page的执行顺序
  9. arcobjects java开发_ArcGIS Engine SDK for Java 最小示例学习
  10. php loadclass,Laravel如何实现自动加载类