• 技术文章 >后端开发 >php教程

    PHP内存缓存Memcached类实例_php技巧

    2016-05-16 20:29:00原创527
    本文实例讲述了PHP内存缓存Memcached类。分享给大家供大家参考。

    具体实现方法如下:

    复制代码 代码如下:
    <?PHP
    class MemcacheModel {
    private $mc = null;
    /**
    * 构造方法,用于添加服务器并创建memcahced对象
    */
    function __construct(){
    $params = func_get_args();
    $mc = new Memcache;
    //如果有多个memcache服务器
    if( count($params) > 1){
    foreach ($params as $v){
    call_user_func_array(array($mc, 'addServer'), $v);
    }
    //如果只有一个memcache服务器
    } else {
    call_user_func_array(array($mc, 'addServer'), $params[0]);
    }
    $this->mc=$mc;
    }
    /**
    * 获取memcached对象
    * @return object memcached对象
    */
    function getMem(){
    return $this->mc;
    }
    /**
    * 检查mem是否连接成功
    * @return bool 连接成功返回true,否则返回false
    */
    function mem_connect_error(){
    $stats=$this->mc->getStats();
    if(emptyempty($stats)){
    return false;
    }else{
    return true;
    }
    }

    private function addKey($tabName, $key){
    $keys=$this->mc->get($tabName);
    if(emptyempty($keys)){
    $keys=array();
    }
    //如果key不存在,就添加一个
    if(!in_array($key, $keys)) {
    $keys[]=$key; //将新的key添加到本表的keys中
    $this->mc->set($tabName, $keys, MEMCACHE_COMPRESSED, 0);
    return true; //不存在返回true
    }else{
    return false; //存在返回false
    }
    }
    /**
    * 向memcache中添加数据
    * @param string $tabName 需要缓存数据表的表名
    * @param string $sql 使用sql作为memcache的key
    * @param mixed $data 需要缓存的数据
    */
    function addCache($tabName, $sql, $data){
    $key=md5($sql);
    //如果不存在
    if($this->addKey($tabName, $key)){
    $this->mc->set($key, $data, MEMCACHE_COMPRESSED, 0);
    }
    }
    /**
    * 获取memcahce中保存的数据
    * @param string $sql 使用SQL的key
    * @return mixed 返回缓存中的数据
    */
    function getCache($sql){
    $key=md5($sql);
    return $this->mc->get($key);
    }

    /**
    * 删除和同一个表相关的所有缓存
    * @param string $tabName 数据表的表名
    */
    function delCache($tabName){
    $keys=$this->mc->get($tabName);
    //删除同一个表的所有缓存
    if(!emptyempty($keys)){
    foreach($keys as $key){
    $this->mc->delete($key, 0); //0 表示立刻删除
    }
    }
    //删除表的所有sql的key
    $this->mc->delete($tabName, 0);
    }
    /**
    * 删除单独一个语句的缓存
    * @param string $sql 执行的SQL语句
    */
    function delone($sql){
    $key=md5($sql);
    $this->mc->delete($key, 0); //0 表示立刻删除
    }
    }
    ?>

    希望本文所述对大家的PHP程序设计有所帮助。

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:PHP 内存 缓存 Memcached
    上一篇:ThinkPHP连接数据库的方式汇总_php实例 下一篇:php实现使用正则将文本中的网址转换成链接标签_php技巧
    PHP编程就业班

    相关文章推荐

    • 小弟我用服务器访问一个网站的二级页面,为什么总被转到它的主页去• 求正则婚配字母 • 检测旋钮所在行 • 解说PHP框架 (1) 基本概念 • 请问一个PHP操作MYSQL的有关问题

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网