当前位置: 首页 > PHP > 正文

php操作memcache缓存方法分享

MemCache的工作流程如下:先检查客户端的请求数据是否在memcached中,如有,直接把请求数据返回,不再对数据库进行任何操作;如果请求的数据不在memcached中,就去查数据库,把从数据库中获取的数据返回给客户端,同时把数据缓存一份到memcached中(memcached客户端不负责,需要程序明确实现);每次更新数据库的同时更新memcached中的数据,保证一致性;当分配给memcached内存空间用完之后,会使用LRU(Least Recently Used,最近最少使用)策略加上到期失效策略,失效数据首先被替换,然后再替换掉最近未使用的数据

使用memcache的前提是需要在服务端先配置好memcahche的环境!确认memcahce可以正常连接之后就可以在程序使用了!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
<?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(); 
    }*/  
  }  
}

转自:http://www.lai18.com/content/426739.htm

本文固定链接: http://www.misul.cn/php_memcache_share.html | 米苏的博客

该日志由 米苏 于2015年06月04日发表在 PHP 分类下, 通告目前不可用,你可以至底部留下评论。
原创文章转载请注明: php操作memcache缓存方法分享 | 米苏的博客
关键字: , ,