Heim  >  Artikel  >  Backend-Entwicklung  >  Grundlegende Methode zum Betreiben des Memcache-Cache in PHP

Grundlegende Methode zum Betreiben des Memcache-Cache in PHP

高洛峰
高洛峰Original
2016-11-29 10:31:331338Durchsuche

<?php
/**
 * Memcache<a href="http://www.php1.cn/category/79.html">缓存</a>操作
 * @update http://www.lai18.com
 */
class MCache extends Object implements CacheFace
{
  private $mem = null; //Mem对象
     
  private $sId = 1;  //servier服务ID
     
  /**
   * 初始化Memcache
   *
   * @return Object
   */
  public function __construct()
  {
    if ( !class_exists(&#39;Memcache&#39;) )
    {
      throw new QException(&#39;PHP extension does not exist: Memcache&#39;);
    }
    $this->mem = new Memcache();
  }
     
  /**
   * 链接memcahce服务
   *
   * @access private
   * @param  string $key 关键字
   * @param  string $value <a href="http://www.php1.cn/category/79.html">缓存</a>内容
   * @return array
   * @update http://www.lai18.com
   */
  private function connect( $sid )
  {
    $file = $this->CacheFile();
    require $file;
    if(! isset($cache) )
    {
      throw new QException(&#39;<a href="http://www.php1.cn/category/79.html">缓存</a>配置文件不存在&#39;.$file);
    }
    $server = $cache[$this->cacheId];
    $sid  = isset($sid) == 0 ? $this->sId : $sid;//memcache服务选择
    if ( ! $server[$sid])
    {
      throw new QException(&#39;当前操作的<a href="http://www.php1.cn/category/79.html">缓存</a>服务器配置文件不存在&#39;);
    }
    $host = $server[$sid][&#39;host&#39;];
    $port = $server[$sid][&#39;port&#39;];
    try {
      $this->mem->connect( $host , $port );
    } catch (Exception $e) {
      exit(&#39;memecache连接失败,错误信息:&#39;. $e->getMessage());
    }
  }
     
  /**
   * 写入<a href="http://www.php1.cn/category/79.html">缓存</a>
   *
   * @access private
   * @param  string $key 关键字
   * @param  string $value <a href="http://www.php1.cn/category/79.html">缓存</a>内容
   * @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);
    }
  }
     
  /**
   * 读取<a href="http://www.php1.cn/category/79.html">缓存</a>
   *
   * @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();
  }
  /**
   * 删除<a href="http://www.php1.cn/category/79.html">缓存</a>
   *
   * @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();
    }*/
  }
}


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn