(转载)http://blog.renren.com/share/223341289/7693783476

题外话 
最近公司在做相关的业务,由于Memcached协议缺少返回码,为了保证业务数据的安全性,不得已只好自己写个扩展来实现需求。

基于memcache扩展的2.2.6的稳定版开发而来。代码已经开源,有需要的朋友请拿走,License是PHP License,请自觉遵守。项目主页:http://code.google.com/p/cmem/

CMEM是什么
CMEM全称为Cloud Memory,是腾讯提供的高性能内存级持久化存储服务,适用于数据量小、访问量高、key-value存储的场景。
CMEM基于一个存储键/值对的hashmap,数据使用内存存储,并保证数据的持久性。

CMEM PHP Extension是什么
CMEM基于标准的Memcached协议以及接口,只是将数据获取接口增加返回值设定。
Memcached的Get协议没有设计返回码,所以Memcached API返回NO_DATA时,有可能是网络原因造成的,不能完全信任。

使用如下流程将是非常危险的,将造成用户数据初始化:

if(NO_DATA) {
    InitData();
}

为解决上述问题,CMEM提供了Memcahced文本扩展协议,增加两个扩展的命令get_ext, gets_ext,使客户端可以根据返回码判断数据是否存在。 这样可以避免网络和设备故障时get不到数据而导致用户数据被误初始化。

CMEM如何使用
在get具体的数据使用,传入两个引用变量$flag、$code:

flag是Memcache原有扩展自带的,在发送set命令时设置的标志项,使用和用法和以前一致;code是CMEM扩展新增的:当且仅当$code返回值为0时,get到的数据是可信的,其他情况,均不可信;

具体使用,请参见如下代码:

//初始化CMEM类
$mem = new CMEM;

//连接CMEM服务
$mem->connect("127.0.0.1", 11211);

//保存key为cmem的数据
$mem->set('cmem', 'CMEM work nice', 0, 86400);

//初始化$flag、$code

(转载)腾讯CMEM的PHP扩展的更多相关文章

  1. 腾讯CMEM的PHP扩展(转载)

    题外话最近公司在做相关的业务,由于Memcached协议缺少返回码,为了保证业务数据的安全性,不得已只好自己写个扩展来实现需求. 基于memcache扩展的2.2.6的稳定版开发而来.代码已经开源,有 ...

  2. ----转载----【前端工具】Chrome 扩展程序的开发与发布 -- 手把手教你开发扩展程序

    关于 chrome 扩展的文章,很久之前也写过一篇.清除页面广告?身为前端,自己做一款简易的chrome扩展吧. 本篇文章重在分享一些制作扩展的过程中比较重要的知识及难点. 什么是 chrome 扩展 ...

  3. [转载]腾讯专家:论高级DBA的自我修养

    作者介绍: 张秀云:2007年开始从事运维方面的工作,经历过网络管理员.linux运维工程师.DBA.分布式存储运维等多个IT职位.对linux运维.mysql数据库.分布式存储有丰富的经验.2012 ...

  4. 【转载】.NET(C#): Task.Unwrap扩展方法和async Lambda

    .NET(C#): Task.Unwrap扩展方法和async Lambda 目录 Task.Unwrap基本使用 Task.Factory.StartNew和Task.Run的Unwrap操作 使用 ...

  5. [转载]用c写PHP的扩展接口(php5,c++)

    原文[http://bugs.tutorbuddy.com/php5cpp/php5cpp/] 第1节. 开始之前 开始前,我要说明:这篇文章所描述的主要是在UNIX的PHP环境上的. 另外一点我要说 ...

  6. 【转载】docker 应用之动态扩展容器空间大小

    docker 容器默认的空间是 10G, 如果想指定默认容器的大小(在启动容器的时候指定),可以在 docker 配置文件里通过 dm.basesize 参数指定,比如 docker -d --sto ...

  7. 转载--php 7.2 安装 mcrypt 扩展

    在 php 官网下载 mcrypt 包,php 扩展官网 # wget http://pecl.php.net/get/mcrypt-1.0.1.tgz # tar xf mcrypt-1.0.1.t ...

  8. [转载]斐讯K2 A2版免TTL刷BREED不死Bootloader

    1:路由器能正常上网,登陆进路由器 (默认密码admin) 2:用浏览器打开这个网址,如果默认ip不是192.168.2.1修改一下.打开后等待即可自动刷入breed. http://192.168. ...

  9. 校准产品质量,把控出海航向,腾讯WeTest《2019中国移动游戏质量白皮书》正式开放预约

    作者:wetest小编 商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处. 原文链接:https://wetest.qq.com/lab/view/483.html 每当步入一个新的年份, ...

随机推荐

  1. HTML5之图像处理

    --- 内嵌图像 - drawImage可以绘制图像context.drawImage(image,dx,dy)context.drawImage(image,dx,dy,dw,dh)context. ...

  2. svn执行clean up 操作时报错 "Previous operation has not finished; run 'cleanup' if it was interrupted"解决如下!

    今天在项目中更新的时候,突然间爆了一个svn的这个错误,当时提示我去clean up操作,结果我执行clean up操作时候,还是报错,后来坚持出来,是因为ios项目中的一个图标出了问题,使svn进入 ...

  3. linux共享文件samba安装与java读取外部文件夹方法

    测试环境RedHat 6.4 一.安装 samba组件安装: (1)首先用“rpm –qa |grep samba”命令检验系统samba服务是否安装. #rpm –qa |grep samba sa ...

  4. ThinkPHP框架安全性能分析

    http://www.freebuf.com/articles/web/59713.html 点击劫持cookie 点击劫持所有链接

  5. UIWebView与JS的深度交互-b

    要实现这样一个需求:按照本地的CSS文件展示一串网络获取的带HTML格式的只有body部分的文本,需要自己拼写完整的 HTML.除此之外,还需要禁用获取的HTML文本中自带的 < img > ...

  6. PPTPD/L2TP/IPSec VPN一键安装包 For CentOS 6

    一.一键安装PPTPD VPN 本教程适用于Openv VPS.Xen VPS或者KVM VPS. 1.首先运行如下命令: cat /dev/net/tun 返回的必须是: cat: /dev/net ...

  7. char型字符串(数组)与string型字符串 指针与引用

    一.常指针: int *const p;    //指针不可改变,但是指针指向的数据可以改变. 指向常量的指针: const int *p;    //指针可以改变,但是指针指向的数据不可以改变. 指 ...

  8. 20 个最棒的 jQuery Tab 插件

    jQuery Tab 常用来做网页上的选项设置界面和导航,本文向你推荐最棒的 20 个 jQuery Tab 插件.Enjoy !! 1. Slider Tabs SliderTabs 是一个可定制的 ...

  9. Codeforces Round #211 (Div. 2)

    难得一次比赛能够自己成功A掉四个题: A题:水题,模拟一下就行: #include <iostream> #include <cstdio> using namespace s ...

  10. zoj 3716

    题目给我们四个点,要求我们以这四个点为圆心,形成四个相切的圆: 求他们的半径和: 首先我们从他们中间选出三个点,以这三个点为圆心的三个圆最大可以两两互相相切: 证明:假设这三个圆的半径分别为a,b,c ...