大连仟亿科技
客服中心
  • 电话
  • 电话咨询:0411-39943997
  • 手机
  • 手机咨询:15840979770
    手机咨询:13889672791
网络营销 >更多
您现在的位置:仟亿科技 > 新闻中心 > 常见问题

腾讯CMEM的PHP程序扩展

作者:billionnet 发布于:2012/6/10 16:56:29 点击量:

题外话
近期公司在做相关的业务,由于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,为引用传入准备
$flag = $code = -1;

//get方法,同时支持传入key组成的数组,同样返回的$code也是数组
$returnValue = $mem->get('cmem', &$flag, &$code);

//当且仅当$code返回值为0时,get到的数据是可信的,其他情况,均不可信
if($code == 0) {
        echo "the value is safe, value is: {$returnValue}";
} else {
        echo "the value is not safe, don't use it";
}

很多内容,比如类的使用以及方法对比、函数的使用以及函数对比请访问项目主页:http://code.google.com/p/cmem/



分享到:


评论加载中...
内容:
评论者: 验证码:
  

Copyright@ 2011-2017 版权所有:大连仟亿科技有限公司 辽ICP备11013762-1号   google网站地图   百度网站地图   网站地图

公司地址:大连市沙河口区中山路692号辰熙星海国际2215 客服电话:0411-39943997 QQ:2088827823 42286563

法律声明:未经许可,任何模仿本站模板、转载本站内容等行为者,本站保留追究其法律责任的权利! 隐私权政策声明