<?php
/**
 * Memcache缓存操作
 * @author hxm
 * @version 1.0
 * @since 2015.05.04
 */
class MCache extends Object implements CacheFace
{
    private $mem = null; //Mem对象
     
    private $sId = 1;    //servier服务ID
     
    /**
     * 初始化Memcache
     *
     * @return  Object
     */
    public function __construct()
    {
        if ( !class_exists('Memcache') )
        {
            throw new QException('PHP extension does not exist: Memcache');
        }
        $this->mem = new Memcache();
    }
     
    /**
     * 链接memcahce服务
     *
     * @access  private
     * @param   string  $key  关键字
     * @param   string  $value  缓存内容
     * @return  array
     */
    private function connect( $sid )
    {
        $file = $this->CacheFile();
        require $file;
        if(! isset($cache) )
        {
            throw new QException('缓存配置文件不存在'.$file);
        }
        $server = $cache[$this->cacheId];
        $sid    = isset($sid) == 0 ? $this->sId : $sid;//memcache服务选择
        if ( ! $server[$sid])
        {
            throw new QException('当前操作的缓存服务器配置文件不存在');
        }
        $host = $server[$sid]['host'];
        $port = $server[$sid]['port'];
        try {
            $this->mem->connect( $host , $port );
        } catch (Exception $e) {
            exit('memecache连接失败,错误信息:'. $e->getMessage());
        }
    }
     
    /**
     * 写入缓存
     *
     * @access  private
     * @param   string  $key  关键字
     * @param   string  $value  缓存内容
     * @return  array
     */
    public function set( $key , $value , $sid , $expire = 0)
    {
        $data = $this->get($key , $sid); //如果已经存在key值
        if( $data )
        {
            return $this->mem->set( $key , $value ,MEMCACHE_COMPRESSED  , $expire);
        } else {
            return $this->mem->add( $key , $value ,MEMCACHE_COMPRESSED  , $expire);
        }
    }
     
    /**
     * 读取缓存
     *
     * @access  private
     * @param   string  $key  关键字
     * @param   int     $sid  选择第几台memcache服务器
     * @return  array
     */
    public function get( $key , $sid)
    {
        $this->connect( $sid );
        return $this->mem->get($key);
    }
     
    /**
     *  清洗(删除)已经存储的所有的元素
     *
     * @access  private
     * @return  array
     */
    public function flush()
    {
        $this->connect();
        return $this->mem->flush();
    }
    /**
     * 删除缓存
     *
     * @access  private
     * @param   string  $key  关键字
     * @param   int     $sid  选择第几台memcache服务器
     * @return  array
     */
    public function remove( $key , $sid)
    {
        $this->connect();
        return $this->mem->delete($key);
    }
     
    /**
     * 析构函数
     * 最后关闭memcache
     */
    public function __destruct()
    {
        /*if(! $this->mem)
        {
            $this->mem->close();
        }*/
    }
}

php memcache 基础操作的更多相关文章

  1. Memcache基础教程

    Memcache是什么 Memcache是danga.com的一个项目,最早是为 LiveJournal 服务的,目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的压力. 它可以应 ...

  2. 一篇memcache基础教程

    Memcache是什么Memcache是danga.com的一个项目,最早是为 LiveJournal 服务的,目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的压力.它可以应对任 ...

  3. MySQL 之基础操作及增删改查等

    一:MySQL基础操作 使用方法: 方式一: 通过图型界面工具,如 Navicat,DBeaver等 方式二: 通过在命令行敲命令来操作 SQL ( Structure query language ...

  4. python基础操作以及hdfs操作

    目录 前言 基础操作 hdfs操作 总结 一.前言        作为一个全栈工程师,必须要熟练掌握各种语言...HelloWorld.最近就被"逼着"走向了python开发之路, ...

  5. MYSQL基础操作

    MYSQL基础操作 [TOC] 1.基本定义 1.1.关系型数据库系统 关系型数据库系统是建立在关系模型上的数据库系统 什么是关系模型呢? 1.数据结构可以规定,同类数据结构一致,就是一个二维的表格 ...

  6. 【Learning Python】【第二章】Python基础类型和基础操作

    基础类型: 整型: py 3.0解决了整数溢出的问题,意味着整型不必考虑32位,64位,有无符号等问题,你写一个1亿亿亿,就是1亿亿亿,不会溢出 a = 10 ** 240 print(a) 执行以上 ...

  7. Emacs学习心得之 基础操作

    作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 Emacs学习心得之 基础操作 1.前言与学习计划2.Emacs基础操作 一. 前言与学习计 ...

  8. Git基础操作

    配置秘钥 1.检查本机有没有秘钥 检查~/.ssh看看是否有名为d_rsa.pub和id_dsa.pub的2个文件. $ ~/.sshbash: /c/Users/lenovo/.ssh: Is a ...

  9. activiti基础操作

    package activitiTest; import java.io.InputStream; import java.util.List; import java.util.zip.ZipInp ...

随机推荐

  1. windwos下基于exp的提权

    00x1: 本文是基于windwos 补丁的漏洞提权. 其实是一件很简单的工作:如果看成数据库的3张表分别是: 未打补丁表, 补丁漏洞表, 漏洞利用提权程序表. 为一一对应关系,所以就是资源的掌握,以 ...

  2. 20165312 2017-2018-2《Java程序设计》课程总结

    20165312 2017-2018-2<Java程序设计>课程总结 每周作业链接汇总 预备作业1:我期望的师生关系 预备作业2:C语言基础调查和java学习展望 预备作业3:Linux安 ...

  3. 随机森林RandomForest

    ID3,C4.5决策树的生成: 输入:训练集D,特征集A,阈值eps, 输出:决策树T 若D中所有样本属于同一类Ck,则T为单节点树,将类Ck作为该结点的类标记,返回T: 若A为空集,即没有特征作为划 ...

  4. oracle数据库组件列表及相关的数据字典视图

    Component Data dictionary tables and views Database V$DATABASE, V$VERSION, V$INSTANCEShared server V ...

  5. CodeSmith和Powerdesigner的搭建和实例化操作 转载自黄聪同学

    好了,废话少说,开始我们的CodeSmith旅程吧,我先讲讲这个系列教程要完成的目标吧,众所周知,CodeSmith其中一个强大的功能就是依照模板生成批量代码,这也是吸引着众多编程人士使用它的原因,它 ...

  6. 502 Bad Gateway

    状态码解释: 502 Bad Gateway:作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应. 502 原因分析: 将请求提交给网关如php-fpm执行,但是由于某些原因没有 ...

  7. 性能测试Jmeter扩展学习-添加自定义函数

    我们在使用jmeter的时候有时候会碰到jmeter现有插件或功能也无法支持的场景,比如前端加密,此时我们就需要自己手动编写函数并导入了,下面就是手动修改并导入的过程. 首先我们需要下载jmeter源 ...

  8. JDK1.7 的 HashMap

    HashMap是一个用于存储key-value的键值对集合,每个键值对都是一个Entry.这些键值对分散存储在一个数组中,这个数组就是HashMap的主干. HashMap每个初始值都为null. 1 ...

  9. K8s部署使用CFSSL创建证书

    证书的编码格式 PEM(Privacy Enhanced Mail),通常用于数字证书认证机构(Certificate Authorities,CA),扩展名为.pem, .crt, .cer, 和  ...

  10. Linux网络编程学习计划

    由于网络编程是很重要的一块,自己这一块也比较欠缺,只知道一些皮毛,从今天开始系统学习<Linux网络编程>一书,全书分为十四个章节: 第一章   概论   P1-16 第二章   UNIX ...