zoukankan      html  css  js  c++  java
  • (转载)腾讯CMEM的PHP扩展

    (转载)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

  • 相关阅读:
    查看mysql服务器连接
    读懂MySQL执行计划
    学会MySQL索引
    记一个有趣的Java OOM!
    高并发场景系列(一) 利用redis实现分布式事务锁,解决高并发环境下减库存
    如何优雅的使用mybatis
    禁止页面后退JS(兼容各浏览器)
    如何做一个对账系统
    centos7.2进入单用户模式修改密码
    linux系统引导流程
  • 原文地址:https://www.cnblogs.com/Robotke1/p/3341270.html
Copyright © 2011-2022 走看看