<?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. greendao3.2.0使用

    源代码地址 https://github.com/greenrobot/greenDAO buildscript { repositories { jcenter() mavenCentral() } ...

  2. 根据url路径获取图片并显示到ListView中

    项目开发中我们需要从网络获取图片显示到控件中,很多开源框架如Picasso可以实现图片下载和缓存功能.这里介绍的是一种简易的网络图片获取方式并把它显示到ListView中. 本案例实现的效果如下: 项 ...

  3. 内训--PPT演示技巧

    企业内训,实操,不涉及如何做PPT,仅讲解PPT播放等内容.做好PPT后,在演讲的过程中,如何使用这些功能.

  4. Calendar打印日历

    package com.example.demo; import org.junit.Test; import org.junit.runner.RunWith; import org.springf ...

  5. SpringBoot 之 MVC

    SpringBoot MVC 和静态资源 首先,我们一定要搞清楚,mvc 配置和 static 配置的联系和区别. mvc 配置其实就是给 spring mvc 框架用的, 具体来说, 比如 @Req ...

  6. 对象转Json时,Date类型格式化问题

    object是一个对象,该对象中有一个字段为Date类型 使用JSONObject obj = JSONObject.fromObject(object);将Object转成json时 Date类型字 ...

  7. type的解释

    在jquery-19.1.1源码中,type,检查对象的类型是:Boolean/Number/String/Function/Array/Date/RegExp/Object/Error中的一种,返回 ...

  8. html----input标签

    HTML 5 <input> 标签 定义和用法 <input> 标签规定用户可输入数据的输入字段. 根据不同的 type 属性,输入字段有多种形态.输入字段可以是文本字段.复选 ...

  9. WordConut

    一.代码地址:https://gitee.com/cainiaoY/WordCount 二.代码: import java.io.*; import java.util.regex.*; public ...

  10. BM递推

    从别的大佬处看到的模板 #include<bits/stdc++.h> #define fi first #define se second #define INF 0x3f3f3f3f ...