Memcache笔记03-php操作Memcached
通过php程序操作Memcached服务几种形式
- Memcache 扩展
- Memcached 扩展
- 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;
总结:
- mem服务的数据不是同步, 数据是分布的
- 把什么数据放入到哪个memcached是由客户端的mem对象决定
- 当执行addServer的时候,并不是立即去连接mem服务,而是通过计算,hash后才去决定连接哪个mem服务,因此当你大量加入服务器到连接池,没有多余开销
Memcache笔记03-php操作Memcached的更多相关文章
- Hibernate框架笔记03表操作多对多配置
目录 1. 数据库表与表之间的关系 1.1 一对多关系 1.2 多对多关系 1.3 一对一关系[了解] 2. Hibernate的一对多关联映射 2.1 创建一个项目,引入相关jar包 2.2. 创建 ...
- Memcache笔记02-telnet操作memcached
telnet操作Memcached 登录到telnet连接到memcached服务: telnet 127.0.0.1 11211 memcached的基本命令: //当telnet登录成功可以看到一 ...
- memcached学习笔记5--socke操作memcached 缓存系统
使用条件:当我们没有权限或者不能使用服务器的时候,我们需要用socket操作memcached memcached-client操作 特点: 无需开启memcache扩展 使用fsocketopen( ...
- Python操作memcached及redis
Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...
- Python之路第十一天,高级(3)-Python操作 Memcached、Redis
Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...
- Linux实战教学笔记32:企业级Memcached服务应用实践
一, Memcached介绍 1.1 Memcached与常见同类软件对比 (1)Memcached是什么? Memcached是一个开源的,支持高性能,高并发的分布式内存缓存系统,由C语言编写,总共 ...
- [转]编译安装libevent,memcache,以及php的memcached扩展
一 安装libevent 1.去官网http://libevent.org/ 下载最新源码,我用的是libevent-2.0.20-stable.tar.gz 2.解压到/usr/src目录 ,执行命 ...
- python操作memcached以及分布式
memcached 是以 LiveJournal 旗下 Danga Interactive 公司的 Brad Fitzpatric 为首开发的一款软件.现在已成为 mixi.Facebook.Live ...
- python操作----Memcached
Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度.Memcached ...
随机推荐
- 【Git使用】强制推送代码到多个远程仓库
只吃了一个香蕉的晚上 一直预报的台风没有来,大盘也飘红了,世界好像变得越来越美好了似的.前两天,晚上下班坐地铁回家,靠在地铁门上看书,竟然坐到了终点站已全然不知,我也不知道我怎么了.怎么了.怎么了!最 ...
- ToolBar、ActionBar与Menu的纠葛(以及navigationIcon、setHomeButtonEnabled、setDisplayHomeAsUpEnabled)
因为贴图的繁琐...所以下面是无图版...完整的在这里: 探究一下toobar和actionbar在使用menu时的吊诡情况 一.背景介绍 toolbar最近比较火,而且是出出来代替actionbar ...
- DotNetBar的初步使用
以前有用过SkinSharp和IrisSkin2皮肤控件来美化UI,简单易用,但不方便自定义.而DotNetBar功能很强大,不仅有Windows2007风格,更有Ribbon风格的界面效果.其效果演 ...
- 重新想象 Windows 8.1 Store Apps (91) - 后台任务的新特性: 下载和上传的新特性, 程序启动前预下载网络资源, 后台任务的其它新特性
[源码下载] 重新想象 Windows 8.1 Store Apps (91) - 后台任务的新特性: 下载和上传的新特性, 程序启动前预下载网络资源, 后台任务的其它新特性 作者:webabcd 介 ...
- ati显卡驱动后,性能不咋地
ubuntu装了ati的闭源驱动后,拖动窗口,会有明显的断裂感,不够平滑
- vim 正则替换
http://www.cppblog.com/kefeng/archive/2010/10/20/130574.html Vim中的正则表达式功能很强大,如果能自由运用,则可以完成很多难以想象的操作. ...
- Visual Studio中设置默认VC++路径
菜单"View" -> "Other Windows" -> "Property Manager" 选择对应的配置并修改即可.
- [PE结构分析] 10.基址重定位
源代码如下: typedef struct _IMAGE_BASE_RELOCATION { DWORD VirtualAddress; DWORD SizeOfBlock; // WORD Type ...
- linux下mysql忘记root密码解决方法
如果使用 MySQL 数据库忘记了root账号密码,可以通过调节配置文件,跳过密码的方式登数据库, 在数据库里面修改账号密码,一般默认的账号是 root 1.编辑 MySQL 配置文件 my.cnf ...
- 发布ASP.NET Core程序到Linux生产环境
原文翻译:Publish to a Linux Production Environment 作者:Sourabh Shirhatti 在这篇文章里我们将介绍如何在 Ubuntu 14.04 Serv ...