通过php程序操作Memcached服务几种形式

  1. Memcache 扩展
  2. Memcached 扩展
  3. Socket套接字操作 memcached-client.php(函数)

对于php扩展来说,danga公司为了能够让php程序能够操作memcached,专门提供了一套供php使用的扩展程序(即php_memcache.dll)

使用扩展来操作memcached服务

(1) 把 php_memcache.dll 文件拷贝 php的ext 下

☞ 不同版本的php 所使用的 php_memcache.dll 的版本不一样

(2) 修改php.ini文件,加载 php_memcache.dll (该文件就是封装了一堆函数)

;加载php_memcache.dll 文件

extension=php_memcache.dll  (.dll扩展程序是用vc将c或c++程序编译而成的。)

(3) 重新启动apache

(4) 我们写程序来完成curd操作.

细节: 在我们添加数据的时候,如果

bool Memcache::add ( string $key , mixed $var [, int $flag [, int $expire ]] )

如果报 expire 设为0 表示,永不过期.(只要memcache不重新启动,就永远在mem中)

exprie 直接给的是秒数,则最大 30*3600*24

如果你希望保持时间超过30  time()+天数*3600*24 即可

mem1.php

  1. <?php
  2. //创建一个mem对象实例
  3. $mem=new Memcache;
  4. if(!$mem->connect("127.0.0.1",11211)){//打开一个memcached服务端连接
  5. die('连接失败!');
  6. }
  7. //增加
  8. //1.增加一个字串
  9. //Memcached::add(...)如果已经有key1则返回false.Memcached::set(...),key1存在则替换,key1不存在则添加
  10. /*if($mem->set('key1',"beijing",MEMCACHE_COMPRESSED,60)){
  11.  
  12. echo '添加ok';
  13. }*/
  14.  
  15. //2.添加数值
  16. /* if($mem->set('key1',100,MEMCACHE_COMPRESSED,60)){
  17. echo '添加ok';
  18. }*/
  19. //3.添加数组
  20. //在添加数组是,根据需要. 希望序列号放入 ,
  21. //serialize<=>unserialize, 如果根据需要,也可以json_encode <=> json_decode
      //serialize目的是用来使数组或对象能够存储和进行网络传输
  1. $arr=array("bj",'tj');
  2. if($mem->set('key1',$arr,MEMCACHE_COMPRESSED,time()+31*3600*24)){
  3. echo '添加数组ok';
  4. }
  5. //4.添加对象
  6. /*class Dog{
  7. public $name;
  8. public $age;
  9. public function __construct($name,$age){
  10. $this->name=$name;
  11. $this->age=$age;
  12. }
  13. }
  14. $dog1=new Dog('小狗',50);
  15. if($mem->set('key1',$dog1,MEMCACHE_COMPRESSED,60)){
  16. echo '添加对象ok';
  17. }*/
  18. //5.添加null 布尔值
  19. /*if($mem->set('key1',false,MEMCACHE_COMPRESSED,60)){
  20. echo '添加布尔ok';
  21. }*/
  22.  
  23. //6. 资源类型放入.
  24. /*$con=mysql_connect("127.0.0.1","root","root");
  25. if(!$con){
  26. die('连接数据库失败');
  27. }
  28. var_dump($con);
  29. echo "<br/>";
  30. if($mem->set('key1',$con,MEMCACHE_COMPRESSED,60)){
  31.  
  32. echo '添加资源ok';
  33. }*/
  34. //查询
  35. $val=$mem->get('key1');
  36. var_dump($val);
  37. //修改
  38. //可以使用replace
  39. if($mem->replace("key11",'hello',MEMCACHE_COMPRESSED,60)){
  40. echo 'replace ok';
  41. }else{
  42. echo 'replace no ok';
  43. }
  44. //删除
  45. echo "<br/>";
  46. if($mem->delete('key1')){
  47. echo 'key1 删除';
  48. }else{
  49. echo 'key1不存在';
  50. }

使用PHP源码来操作memcached服务

如果管理员不让我们去加载 memcache.dll 文件,我们可以直接通过源码操作.一般在不能加入扩展的情况下,使用源码操作

首先关闭php_memcache.dll扩展,接着看mem3.php代码:

  1. require_once 'memcached-client.php';
  2. $mc = new memcached(array(
  3. 'servers' => array('127.0.0.1:11211'), //连接的memcacheip和端口
  4. 'debug' => false, //是否debug
  5. 'compress_threshold' => 10240, /*最大压缩*/
  6. 'persistant' => true)); /*是否是持久连接*/
  7. $mc->set('key1', array('some', 'array'));
  8. // $mc->replace('key', 'some random string');
  9.  
  10. $val = $mc->get('key1');
  11. var_dump($val);
  12. //修改
  13. $mc->replace('key1', "北京");
  14. $val = $mc->get('key1');
  15.  
  16. var_dump($val);
  17. //删除
  18. $mc->delete('key1');
  19. $val = $mc->get('key1');
  20. echo "删除后";
  21. var_dump($val);

 使用源码操作memcached的特点:

1.不需要开启memcache扩展

2.使用fsockopen()套接字连接memcached

3.同样执行执行CRUD

memcached分布式介绍:

php连接memcache服务器方式:

  • Memcache::connect打开一个memcached服务端连接
  • Memcache::addServer向连接池中添加一个memcache服务器

当连接池中有多个memcache服务器的时候,客户端会采用分布式算法,确定key值到底保存到哪台memcache服务器。

案例:mem4.php

  1. //我的电脑上有两个memcached服务
  2. $mem = new Memcache;
  3.  
  4. $mem->addServer('127.0.0.1',11211);
  5. $mem->addServer('127.0.0.1',9999);
  6. //这里主义,把key1,放入到11211端口的mem还是9999端口的mem就不要我们操心,有$mem对象本身维护(hash散列算法)
  7. if($mem->add('key1','hello',MEMCACHE_COMPRESSED,300)){
  8. echo 'add ok!';
  9. }
  10. if($mem->set('key2','hello2',MEMCACHE_COMPRESSED,300)){
  11. echo 'add ok!';
  12. }
  13. if($mem->set('key3','hello3',MEMCACHE_COMPRESSED,300)){
  14. echo 'add ok!';
  15. }

mem5.php

  1. //如何从多个mem中取出你的key值?
  2. $mem = new Memcache;
  3.  
  4. $mem ->addSever('127.0.0.1',11211);
  5. $mem ->addSever('127.0.0.1',9999)
  6.  
  7. $val=$mem->get('key1');
  8. echo '程序中取出分布的值='.$val;

总结:

  1. mem服务的数据不是同步, 数据是分布的
  2. 把什么数据放入到哪个memcached是由客户端的mem对象决定
  3. 当执行addServer的时候,并不是立即去连接mem服务,而是通过计算,hash后才去决定连接哪个mem服务,因此当你大量加入服务器到连接池,没有多余开销

Memcache笔记03-php操作Memcached的更多相关文章

  1. Hibernate框架笔记03表操作多对多配置

    目录 1. 数据库表与表之间的关系 1.1 一对多关系 1.2 多对多关系 1.3 一对一关系[了解] 2. Hibernate的一对多关联映射 2.1 创建一个项目,引入相关jar包 2.2. 创建 ...

  2. Memcache笔记02-telnet操作memcached

    telnet操作Memcached 登录到telnet连接到memcached服务: telnet 127.0.0.1 11211 memcached的基本命令: //当telnet登录成功可以看到一 ...

  3. memcached学习笔记5--socke操作memcached 缓存系统

    使用条件:当我们没有权限或者不能使用服务器的时候,我们需要用socket操作memcached memcached-client操作 特点: 无需开启memcache扩展 使用fsocketopen( ...

  4. Python操作memcached及redis

    Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...

  5. Python之路第十一天,高级(3)-Python操作 Memcached、Redis

    Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...

  6. Linux实战教学笔记32:企业级Memcached服务应用实践

    一, Memcached介绍 1.1 Memcached与常见同类软件对比 (1)Memcached是什么? Memcached是一个开源的,支持高性能,高并发的分布式内存缓存系统,由C语言编写,总共 ...

  7. [转]编译安装libevent,memcache,以及php的memcached扩展

    一 安装libevent 1.去官网http://libevent.org/ 下载最新源码,我用的是libevent-2.0.20-stable.tar.gz 2.解压到/usr/src目录 ,执行命 ...

  8. python操作memcached以及分布式

    memcached 是以 LiveJournal 旗下 Danga Interactive 公司的 Brad Fitzpatric 为首开发的一款软件.现在已成为 mixi.Facebook.Live ...

  9. python操作----Memcached

    Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度.Memcached ...

随机推荐

  1. 创意欣赏:20幅字体排版(Typography)素描

    通常我们都只关注最终的作品,但其实幕后还有很多的过程,其中一个是素描.素描用来表达最初思想观念的原型.有时客户需要一个独特的品牌新LOGO或字体,这时先绘制在纸上是比较方便的,之后扫描到 Photos ...

  2. ionic+angular+cordova 安卓环境搭建

    1.java环境配置 下载java jdk 百度搜索java jdk安装完后在cmd窗口输入Java -version 显示以下即为安装成功.然后把java jdk配置到环境变量. (1)选择[新建系 ...

  3. mysql按汉语拼音首字母排序

      如果数据表table的某字段name的字符编码是utf8_general_ci :   SELECT *  FROM `table` ORDER BY convert(name USING gbk ...

  4. 转载:混淆包含SlidingMenu、gson等Android代码的proguard写法

    描述:作为一个写了几年c#的码农,咱的java水平实在不敢恭维,但是最近有个任务需要弄点java的代码,还要研究混淆.网上百度并实验了整整一天,终于算是有点成果了.其中混淆的时候由于用到了gson包, ...

  5. SystemTap知识(二)

    Unbuntu安装systemtap: http://www.cnblogs.com/hdflzh/archive/2012/07/25/2608910.html 1 更新源到http://mirro ...

  6. .Net魔法堂:史上最全的ActiveX开发教程——ActiveX与JS间交互篇

    一.前言 经过上几篇的学习,现在我们已经掌握了ActiveX的整个开发过程,但要发挥ActiveX的真正威力,必须依靠JS.下面一起来学习吧! 二.JS调用ActiveX方法 只需在UserContr ...

  7. VC使用libcurl模拟登录CSDN并自动评论资源以获取积分

    环境:Win7 64位+VC2008 软件及源码下载:(http://pan.baidu.com/s/1jGE52pK) 涉及到的知识点: C++多线程编程 libcurl的使用(包括发送http请求 ...

  8. WampServer 给电脑搭建apache服务器和php环境

    WampServer 给电脑搭建apache服务器和php环境 前端不仅要做页面展示层,还负责着数据交互的部分,不要等到后端人员做好工作了前端才开始对接,那样太被动了. 前端在完成静态页面的编码后,就 ...

  9. POJ 1836 Alignment 最长递增子序列(LIS)的变形

    大致题意:给出一队士兵的身高,一开始不是按身高排序的.要求最少的人出列,使原序列的士兵的身高先递增后递减. 求递增和递减不难想到递增子序列,要求最少的人出列,也就是原队列的人要最多. 1 2 3 4 ...

  10. 利用javascript、php和ajax实现计算器

    计算器和ajax部分: <?php /** * Created by PhpStorm. * User: Administrator * Date: 16-9-2 * Time: 上午9:20 ...