My favorites | Sign in
Project Home Downloads Issues Source
Project Information
Members
Links

题记

代码基于Memcache扩展的2.2.6的稳定版开发,License是PHP License,请自觉遵守。

Foreword

This project based on memcached extension2.2.6,License is PHP License.

CMEM是什么?

CMEM全称为Cloud Memory,是腾讯提供的高性能内存级持久化存储服务,适用于数据量小、访问量高、key-value存储的场景。

CMEM基于一个存储键/值对的hashmap,数据使用内存存储,并保证数据的持久性。

What is CMEM?

CMEM full name is Cloud Memory, is Tencent's high-performance memory-level persistent storage service for a small amount of data, access to high, key-value store scene.

CMEM is based on a memory key / value pairs hashmap, using memory to store data and ensure data persistence.

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: <b>{$returnValue}</b>";
} else {
        echo "the value is not safe, don't use it";
}

类的使用以及方法对比

CMEM类的用法与Memcache类的用法唯一区别就是将new Memcache变成new CMEM,其他均一致。(推荐此种方式)

//连接
$mem = new Memcache;
$mem->connect("127.0.0.1", 11211);

//保存数据
$mem->set('key1', 'This is first value', 0, 60);
$val = $mem->get('key1');
echo "Get key1 value: " . $val ."<br />";

//替换数据
$mem->replace('key1', 'This is replace value', 0, 60);
$val = $mem->get('key1');
echo "Get key1 value: " . $val . "<br />";

//保存数组
$arr = array('aaa', 'bbb', 'ccc', 'ddd');
$mem->set('key2', $arr, 0, 60);
$val2 = $mem->get('key2');
echo "Get key2 value: ";
print_r($val2);
echo "<br />";

//删除数据
$mem->delete('key1');
$val = $mem->get('key1');
echo "Get key1 value: " . $val . "<br />";

//清除所有数据
$mem->flush();
$val2 = $mem->get('key2');
echo "Get key2 value: ";
print_r($val2);
echo "<br />";

//关闭连接
$mem->close();

上例中唯一需要改变的就是第一行。

$mem = new CMEM;
$mem->connect("127.0.0.1", 11211);

如果对Memcache的使用有疑问,可以参考《Memcache基础教程》。

Memcache PHP Extension CMEM PHP Extension 命令说明
Memcache CMEM Memcache类
Memcache::add CMEM::add 增加一个条目到缓存服务器
Memcache::addServer CMEM::addServer 向连接池中添加一个memcache服务器
Memcache::close CMEM::close 关闭memcache连接
Memcache::connect CMEM::connect 打开一个memcached服务端连接
Memcache::decrement CMEM::decrement 减小元素的值
Memcache::delete CMEM::delete 从服务端删除一个元素
Memcache::flush CMEM::flush 清洗(删除)已经存储的所有的元素
Memcache::get CMEM::get 从服务端检回一个元素
Memcache::getExtendedStats CMEM::getExtendedStats 缓存服务器池中所有服务器统计信息
Memcache::getServerStatus CMEM::getServerStatus 用于获取一个服务器的在线/离线状态
Memcache::getStats CMEM::getStats 获取服务器统计信息
Memcache::getVersion CMEM::getVersion 返回服务器版本信息
Memcache::increment CMEM::increment 增加一个元素的值
Memcache::pconnect CMEM::pconnect 打开一个到服务器的持久化连接
Memcache::replace CMEM::replace 替换已经存在的元素的值
Memcache::set CMEM::set Store data at the server
Memcache::setCompressThreshold CMEM::setCompressThreshold 开启大值自动压缩
Memcache::setServerParams CMEM::setServerParams 运行时修改服务器参数和状态

函数的使用以及函数对比

php.net上Memcache的使用手册已经删除了以下函数的说明。 虽然本扩展兼容以下函数,但是不推荐使用。

Memcache PHP Extension CMEM PHP Extension 命令说明
memcache_add cmem_add 增加一个条目到缓存服务器
memcache_add_server cmem_add_server 向连接池中添加一个memcache服务器
memcache_close cmem_close 关闭memcache连接
memcache_connect cmem_connect 打开一个memcached服务端连接
memcache_debug cmem_debug 转换调试输出的开/关
memcache_decrement cmem_decrement 减小元素的值
memcache_delete cmem_delete 从服务端删除一个元素
memcache_flush cmem_flush 清洗(删除)已经存储的所有的元素
memcache_get cmem_get 从服务端检回一个元素
memcache_get_extended_stats cmem_get_extended_stats 缓存服务器池中所有服务器统计信息
memcache_get_server_status cmem_get_server_status 用于获取一个服务器的在线/离线状态
memcache_get_stats cmem_get_stats 获取服务器统计信息
memcache_get_version cmem_get_version 返回服务器版本信息
memcache_increment cmem_increment 增加一个元素的值
memcache_pconnect cmem_pconnect 打开一个到服务器的持久化连接
memcache_replace cmem_replace 替换已经存在的元素的值
memcache_set cmem_set Store data at the server
memcache_set_compress_threshold cmem_set_compress_threshold 开启大值自动压缩
memcache_set_server_params cmem_set_server_params 运行时修改服务器参数和状态

Powered by Google Project Hosting