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 ...
随机推荐
- 创意欣赏:20幅字体排版(Typography)素描
通常我们都只关注最终的作品,但其实幕后还有很多的过程,其中一个是素描.素描用来表达最初思想观念的原型.有时客户需要一个独特的品牌新LOGO或字体,这时先绘制在纸上是比较方便的,之后扫描到 Photos ...
- ionic+angular+cordova 安卓环境搭建
1.java环境配置 下载java jdk 百度搜索java jdk安装完后在cmd窗口输入Java -version 显示以下即为安装成功.然后把java jdk配置到环境变量. (1)选择[新建系 ...
- mysql按汉语拼音首字母排序
如果数据表table的某字段name的字符编码是utf8_general_ci : SELECT * FROM `table` ORDER BY convert(name USING gbk ...
- 转载:混淆包含SlidingMenu、gson等Android代码的proguard写法
描述:作为一个写了几年c#的码农,咱的java水平实在不敢恭维,但是最近有个任务需要弄点java的代码,还要研究混淆.网上百度并实验了整整一天,终于算是有点成果了.其中混淆的时候由于用到了gson包, ...
- SystemTap知识(二)
Unbuntu安装systemtap: http://www.cnblogs.com/hdflzh/archive/2012/07/25/2608910.html 1 更新源到http://mirro ...
- .Net魔法堂:史上最全的ActiveX开发教程——ActiveX与JS间交互篇
一.前言 经过上几篇的学习,现在我们已经掌握了ActiveX的整个开发过程,但要发挥ActiveX的真正威力,必须依靠JS.下面一起来学习吧! 二.JS调用ActiveX方法 只需在UserContr ...
- VC使用libcurl模拟登录CSDN并自动评论资源以获取积分
环境:Win7 64位+VC2008 软件及源码下载:(http://pan.baidu.com/s/1jGE52pK) 涉及到的知识点: C++多线程编程 libcurl的使用(包括发送http请求 ...
- WampServer 给电脑搭建apache服务器和php环境
WampServer 给电脑搭建apache服务器和php环境 前端不仅要做页面展示层,还负责着数据交互的部分,不要等到后端人员做好工作了前端才开始对接,那样太被动了. 前端在完成静态页面的编码后,就 ...
- POJ 1836 Alignment 最长递增子序列(LIS)的变形
大致题意:给出一队士兵的身高,一开始不是按身高排序的.要求最少的人出列,使原序列的士兵的身高先递增后递减. 求递增和递减不难想到递增子序列,要求最少的人出列,也就是原队列的人要最多. 1 2 3 4 ...
- 利用javascript、php和ajax实现计算器
计算器和ajax部分: <?php /** * Created by PhpStorm. * User: Administrator * Date: 16-9-2 * Time: 上午9:20 ...