通过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

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

使用PHP源码来操作memcached服务

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

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

require_once 'memcached-client.php';
$mc = new memcached(array(
'servers' => array('127.0.0.1:11211'), //连接的memcacheip和端口
'debug' => false, //是否debug
'compress_threshold' => 10240, /*最大压缩*/
'persistant' => true)); /*是否是持久连接*/
$mc->set('key1', array('some', 'array'));
// $mc->replace('key', 'some random string'); $val = $mc->get('key1');
var_dump($val);
//修改
$mc->replace('key1', "北京");
$val = $mc->get('key1'); var_dump($val);
//删除
$mc->delete('key1');
$val = $mc->get('key1');
echo "删除后";
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

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

mem5.php

//如何从多个mem中取出你的key值?
$mem = new Memcache; $mem ->addSever('127.0.0.1',11211);
$mem ->addSever('127.0.0.1',9999) $val=$mem->get('key1');
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. 【Git使用】强制推送代码到多个远程仓库

    只吃了一个香蕉的晚上 一直预报的台风没有来,大盘也飘红了,世界好像变得越来越美好了似的.前两天,晚上下班坐地铁回家,靠在地铁门上看书,竟然坐到了终点站已全然不知,我也不知道我怎么了.怎么了.怎么了!最 ...

  2. ToolBar、ActionBar与Menu的纠葛(以及navigationIcon、setHomeButtonEnabled、setDisplayHomeAsUpEnabled)

    因为贴图的繁琐...所以下面是无图版...完整的在这里: 探究一下toobar和actionbar在使用menu时的吊诡情况 一.背景介绍 toolbar最近比较火,而且是出出来代替actionbar ...

  3. DotNetBar的初步使用

    以前有用过SkinSharp和IrisSkin2皮肤控件来美化UI,简单易用,但不方便自定义.而DotNetBar功能很强大,不仅有Windows2007风格,更有Ribbon风格的界面效果.其效果演 ...

  4. 重新想象 Windows 8.1 Store Apps (91) - 后台任务的新特性: 下载和上传的新特性, 程序启动前预下载网络资源, 后台任务的其它新特性

    [源码下载] 重新想象 Windows 8.1 Store Apps (91) - 后台任务的新特性: 下载和上传的新特性, 程序启动前预下载网络资源, 后台任务的其它新特性 作者:webabcd 介 ...

  5. ati显卡驱动后,性能不咋地

    ubuntu装了ati的闭源驱动后,拖动窗口,会有明显的断裂感,不够平滑

  6. vim 正则替换

    http://www.cppblog.com/kefeng/archive/2010/10/20/130574.html Vim中的正则表达式功能很强大,如果能自由运用,则可以完成很多难以想象的操作. ...

  7. Visual Studio中设置默认VC++路径

    菜单"View" -> "Other Windows" -> "Property Manager" 选择对应的配置并修改即可.

  8. [PE结构分析] 10.基址重定位

    源代码如下: typedef struct _IMAGE_BASE_RELOCATION { DWORD VirtualAddress; DWORD SizeOfBlock; // WORD Type ...

  9. linux下mysql忘记root密码解决方法

    如果使用 MySQL 数据库忘记了root账号密码,可以通过调节配置文件,跳过密码的方式登数据库, 在数据库里面修改账号密码,一般默认的账号是 root 1.编辑 MySQL 配置文件 my.cnf ...

  10. 发布ASP.NET Core程序到Linux生产环境

    原文翻译:Publish to a Linux Production Environment 作者:Sourabh Shirhatti 在这篇文章里我们将介绍如何在 Ubuntu 14.04 Serv ...