Memcache和Memcached 其实是一个东西,只是php中要是用的扩展不一样, 2009年左右有人丰富memcache的用法和性能,编写了一个libmemcached是独立第三方client library,才有了memcached ,用法也有了很大的改进比如添加了 getMulti() 批量获取键值

windows下只能安装php_memcache.dll 扩展并不存在 php_memcached.dll, 所以windows 中只能使用$mcd = new Memcache() 不能使用new Memcached()


Memcache 类

$memcache = new Memcache;
$memcache->connect('127.0.0.1', 11211);
$memcache->pconnec('127.0.0.1', 11211);
// 打开一个到服务器的持久化连接 , 连接不会在脚本执行结束后或者close()被调用后关闭
$memcache->addServer('123.57.210.55', 11211,$persistent,$weight);
// 向连接池中添加一个memcache服务器 $persistent 是否持久化连接 $weight
控制桶的数量提升被选中的权重 $timeout 表示连续持续时间
$memcache->set('name', 'TK');
// 默认存储不压缩 不过期 , 其中字符串和数值直接存储,其他类型序列化后存储
set其实是add方法和replace方法集合
$memcache->set('email', 'julylovin@163.com',MEMCACHE_COMPRESSED,5);
// MEMCACHE_COMPRESSED设置存储是否压缩 , 5表示5秒后过期但是最大只能设置2592000秒(30天)
如果设置为0 表示永不过期, 可以设置将来的时间戳
$memcache->set('info',array('age'=>'26','salary'=>'1000'));
// 可以直接存储数组,redis中存储需要手动serialize()序列化
$memcache->add('counter', '10', MEMCACHE_COMPRESSED, 0);
//如果键值存在会返回false , 如果不存在, 和set方法一样,生成一个counter的key并赋值10
$memcache->replace ('counter', '10');
//如果键值不存在会返回false , 如果存在, 替换counter的值为10
$memcache->increment('counter', 3);
// 首先将元素当前值转换成数值然后减去value 操作counter键值+3
若键不存在 则返回false 不能用于压缩的键值操作,否则get键会失败
$memcache->decrement('counter', 3); // 操作counter键值-3 , 若键不存在 则返回false
$memcache->delete('counter', 3); // 操作删除键counter , 3表示3秒内删除,默认是0即立即删除
$memcache->flush(); //flush()立即使所有已经存在的元素失效
$memcache->getExtendedStats ();
// 返回一个二维关联数据的服务器统计信息。数组的key由host:port方式组成
$memcache->getServerStatus ('127.0.0.1'); // 获取返回一个服务器的在线/离线状态  0表示离线 非0在线
$memcache->getStats(); // 获取服务器统计信息
$memcache->getVersion(); // 返回服务器版本信息
$memcache->setCompressThreshold ($threshold, $min_saving);
// 开启大值自动压缩 $threshold设置压缩阀值 2000字节 ,即字节数大于2K 就压缩
$min_saving 0--1之间 0.2表示压缩20%
$memcache->setServerParams('memcache_host', 11211, 1, 15, true, '_callback_memcache_failure');
// $memcache->addServer('memcache_host', 11211, false, 1, 1, -1, false);
已经通过addServer 配置过服务器 使用setServerParams 重新设置配置信息

Memcached 类

此次练习我是在linux上安装了phpstorm,linux平台开发配置看我的其他文章

$memcached = new Memcached(); //   必须安装memcached扩展 不会安装看我的相关文章
#server_key名词解释#
#当台服务IP和端口完全连通好之后,构成一个hash环,$server_key才会生效
#$server_key 只是为了存储的key打个标记 比如有三台 memcache服务器 (A B C ) , 指定 server_key
'master-a' 'master-b' 'master-c' 分别存储 会员 订单 日志 等等
$memcached->addServer('192.168.206.128',11211); // 连接服务器
$memcached->setOption(Memcached::OPT_COMPRESSION, false);
//配置存储不压缩,压缩value不利于递增递减
$memcached->setOption(Memcached::OPT_LIBKETAMA_COMPATIBLE, true);
//
$memcached->addServers(array( //添加多台服务器分布式
array('192.168.206.128', 11311, 20),
array('192.168.206.128', 11411, 30)
));
$memcached->flush(1); //1秒内清除所有元素
$memcached->set('name','TK');

$memcached->setByKey('server_master_db','mage','28');
# 指定 server_key server_master_db 存储键mage $memcached->setMulti(array('salary'=>'3000','email'=>'julylovin@163.com'));
// 存储多个元素 $memcached->setMultiByKey('server_master_db',
array('salary'=>'3000','email'=>'julylovin@163.com'));
// 'server_master_db'服务器 存储多个元素
$memcached->add('name','TK'); // 键name不存在添加value 否则添加失败

$memcached->addByKey('server_master_db','mname','MTK');
$memcached->append('key','-816'); // 键key的value后追加字符串 -816

$memcached->appendByKey('server_master_db','mname','-923');
$memcached->prepend('name','pre-') ; #向一个已存在的元素前面追加数据

$memcached->prependByKey('server_master_db','name','pre-') ;
# 使用server_key自由的将key映射到指定服务器 向一个已存在的元素前面追加数据
$memcached->get('name');

$memcached->get('name',null,$cas);
# 第2参数指定缓存回掉函数 ,不指定传null
# 如果元素被找到,并且返回变量 $cas 内部是通过引用变量回传的 $memcached->getByKey('server_master_db','mname'); # 从特定的服务器检索元素
$memcached->getAllKeys(); // bug 我一致返回是false
$memcached->cas($cas, 'name', 'TangKang');
#要与$memcached->get('name',null,$cas) 方法搭配用 才可以拿到 $cas变量
#它仅在当前客户端最后一次取值后,该key 对应的值没有被其他客户端修改的情况下, 才能够将值写入
#这是Memcached扩展比Memcache扩展一个非常重要的优势
在这样一个系统级(Memcache自身提供)的冲突检测机制(乐观锁)下, 我们才能保证高并发下的数据安全 $memcached->casByKey($cas,'server_master_db', 'name', 'TangKang');
$memcached->increment('age','1');
#增加数值元素的值 如果元素的值不是数值类型,将其作为0处理 $memcached->incrementByKey('server_master_db','age','1');
# 用于识别储存和读取值的服务器
$memcached->decrement('age','1');
#减少数值元素的值 如果元素的值不是数值类型,将其作为0处理 $memcached->decrementByKey('server_master_db','age','1');
# 用于识别储存和读取值的服务器
$memcached->getDelayed(array('name', 'age'), true, null);
# 请求多个元素, 如果with_cas设置为true,会同时请求每个元素的CAS标记
指定一个result callback来替代明确的抓取结果 $memcached->getDelayedByKey('server_master_db',array('name', 'age'), true, null);
$memcached->fetch();
# 搭配 $memcached->getDelayed()使用, 从最后一次请求中抓取下一个结果 $memcached->fetchAll();
#抓取最后一次请求的结果集中剩余的所有结果
$memcached->getMulti(array('name', 'age')); #检索多个元素

$memcached->getMultiByKey('server_master_db',array('mname', 'mage'));
# 从特定服务器检索多个元素
# 与 $this->memcached->fetchAll() 搭配使用
$memcached->getOption(Memcached::OPT_COMPRESSION);
# 获取Memcached的选项值
$memcached->getResultCode() ;
# 返回最后一次操作的结果代码 Memcached::RES_NOTSTORED $memcached->getResultMessage() ;
# 返回最后一次操作的结果描述消息
$memcached->getServerByKey('server_master_db') ; # 获取一个key所映射的服务器信息

$memcached->getServerList() ; #  获取服务器池中的服务器列表

$memcached->getStats() ; #  获取服务器池的统计信息

$memcached->getVersion() ;  #  获取服务器池中所有服务器的版本信息
$memcached->isPersistent() ; #判断当前连接是否是长连接
$memcached->replace('name','pre-julylovin') ;
#set()类似,但是如果 服务端不存在key, 操作将失败 $memcached->replaceByKey('server_master_db','name','pre-julylovin') ;
#setBykey()类似,但是如果 服务端不存在key, 操作将失败
$memcached->resetServerList() ; //清楚服务器池信息
$memcached->setOption(Memcached::OPT_PREFIX_KEY, "widgets") ;
#设置一个memcached选项 $memcached->setOptions(array()) ;
#设置一个memcached选项
$memcached->setSaslAuthData($username , $password ) ;
#setSaslAuthData 方法不存在
$memcached->touch('name', 10) ;
#设置键name 10秒后过期(只适用30天之内的秒数) ,30天以后请设置时间戳 $memcached->touchByKey('server_master_db','name',10) ;
$memcached->delete('age',10);
#10秒(秒数/时间戳)内删除一个元素 这个键已经存在删除队列
该键对应的get、add、replace命令都不可用,直到删除 $memcached->deleteByKey('server_master_db','age'); $memcached->deleteMulti(array('age','name')); #传入array删除多个key $memcached->deleteMultiByKey('server_master_db',array('age','name'));
$memcached->quit(); # 关闭所有打开的链接

Memcache/Memcached的PHP操作手册(纯手稿版)的更多相关文章

  1. php Memcache/Memcached操作手册

    php Memcache/Memcached使用教程 Memcache和Memcached 其实是一个东西,只是php中要是用的扩展不一样, 2009年左右有人丰富memcache的用法和性能,编写了 ...

  2. PHP7安装Memcache+Memcached缓存加速WordPress教程

    PHP7安装Memcache+Memcached缓存加速WordPress教程 2016年1月19日 6,691 Views 生活方式 PHP7最显著的变化就是性能的极大提升,已接近Facebook开 ...

  3. (47) odoo详细操作手册

    odoo 8 详细操作手册, ERP(Odoo8.0)操作手册-v1.10(陈伟明).pdf 链接: http://pan.baidu.com/s/1hsp0bVQ 密码: r9tt 花了将近9个月时 ...

  4. SharePoint2010升级到SharePoint2013操作手册

    SharePoint2010升级到SharePoint2013操作手册 目 录 第一章 前言    3 第二章 升级前准备    3 第三章 升级流程图    5 第四章 升级过程    5 4.1 ...

  5. Mysql 操作手册

    mysql操作手册 版本:5.6.16mysql linux安装基本步骤:#rpm -e --nodeps mysql-lib-5.1.*#rpm -ivh mysql-server#rpm -ivh ...

  6. [转]SVN操作手册

    [转]SVN操作手册 2012-04-28 11:26 by NewSea, 2495 阅读, 0 评论, 收藏, 编辑 原文: http://hi.baidu.com/caiqiupeng/blog ...

  7. SVN操作手册(part1&part2)——SVN安装

    SVN操作手册 1.关于SVN 有一个简单但不十分精确比喻: SVN = 版本控制 + 备份服务器 简单的说,您可以把SVN当成您的备份服务器,更好的是,他可以帮您记住每次上传到这个服务器的档案内容. ...

  8. Nginx+Tomcat+MemCached 集群配置手册

    系统实施文档 Nginx+Tomcat+MemCached 集群配置手册 目    录 第1章   概述 1.1   目标 互联网的快速发展带来了互联网系统的高负载和高可用性, 这要求我们在设计系统架 ...

  9. svn 迁移至git操作手册

    svn 迁移至git操作手册 项目交付.版本管理工具变更等情况下,迁移svn旧历史记录有很大必要,方便后续追踪文件的提交历史,文件修改记录比对等.git自带了从svn迁移至git的工具命令,可很好的对 ...

随机推荐

  1. 微信小程序图片宽100%显示并且不变形

    <view class="meiti" style="background-color:red;"> <image src="htt ...

  2. 发一些靠谱的招聘网站(含ios)

    近日整理一些 招聘网站 , 欢迎大家 推荐 http://www.zhaopin.com 智联,貌似这货上市了.. http://www.51job.com   51job  还行 大街就不提了.0. ...

  3. [Contiki系列论文之2]WSN的自适应通信架构

    说明:本系列文章翻译自Contiki之父Adam Dunkels经典论文,版权归原作者全部. Contiki是由Adam Dunkels及其团队开发的系统.研读其论文是对深入理解Contiki系统的最 ...

  4. Codeforces Round #Pi (Div. 2)(A,B,C,D)

    A题: 题目地址:Lineland Mail #include <stdio.h> #include <math.h> #include <string.h> #i ...

  5. git mergetool 解决冲突的问题

    git mergetool http://blog.csdn.net/u012150179/article/details/14047183

  6. lua -- 在面板中添加多个部件

    function UIBagController:initItemView( ) -- 获取面板 self.panelCenter = tolua.cast(UIHelper:seekWidgetBy ...

  7. 每日英语:The Risks of Big Data for Companies

    Big data. It's the latest IT buzzword, and it isn't hard to see why. The ability to parse more infor ...

  8. 将docker的image转移到数据盘

    1. 将 /var/lib/docker 移至数据盘 原因: docker运行中产生较大文件,以及pull下来的images会占用很多空间: 注意:在执行前确认docker已经启动,sudo dock ...

  9. BleedTree动画混合树[Unity]

    Unity在中土大陆的大肆推广能从广泛的中文翻译资料中看出.所以,手册才是王道. 游戏动画中的一个常见任务是在两个或更多相似运动之间混合.最佳的已知示例可能是根据角色速度混合行走和奔跑动画.另一个示例 ...

  10. Mac下终端(terminal)的一些快捷键

    Mac下终端(terminal)的一些快捷键 行首ctrl + a 行尾ctrl + e 两个终端窗口切换alt + 方向键 命令中,上一个单词esc + b (iterm2) 下一个单词esc + ...