<?php
|
/**
|
* PhalApi_Cache_Memecahce MC缓存
|
*
|
* - 使用序列化对需要存储的值进行转换,以提高速度
|
* - 默认不使用zlib对值压缩
|
* - 请尽量使用Memcached扩展
|
*
|
* @package PhalApi\Cache
|
* @license http://www.phalapi.net/license GPL 协议
|
* @link http://www.phalapi.net/
|
* @author PhpStorm George <plzhuangyuan@163.com> 15/5/6 下午8:53
|
*/
|
|
class PhalApi_Cache_Memcache implements PhalApi_Cache {
|
|
protected $memcache = null;
|
|
protected $prefix;
|
|
/**
|
* @param string $config['host'] Memcache域名,多个用英文逗号分割
|
* @param int/string $config['port'] Memcache端口,多个用英文逗号分割
|
* @param int/string $config['weight'] Memcache权重,多个用英文逗号分割
|
* @param string $config['prefix'] Memcache key prefix
|
*/
|
public function __construct($config) {
|
$this->memcache = $this->createMemcache();
|
|
$hostArr = explode(',', $config['host']);
|
$portArr = explode(',', $config['port']);
|
$weightArr = isset($config['weight']) ? explode(',', $config['weight']) : array();
|
|
foreach ($hostArr as $idx => $host) {
|
$this->memcache->addServer(
|
trim($host),
|
isset($portArr[$idx]) ? intval($portArr[$idx]) : 11211,
|
isset($weightArr[$idx]) ? intval($weightArr[$idx]) : 0
|
);
|
}
|
|
$this->prefix = isset($config['prefix']) ? $config['prefix'] : 'phalapi_';
|
}
|
|
public function set($key, $value, $expire = 600) {
|
$this->memcache->set($this->formatKey($key), @serialize($value), 0, $expire);
|
}
|
|
public function get($key) {
|
$value = $this->memcache->get($this->formatKey($key));
|
return $value !== FALSE ? @unserialize($value) : NULL;
|
}
|
|
public function delete($key) {
|
return $this->memcache->delete($this->formatKey($key));
|
}
|
|
/**
|
* 获取MC实例,以便提供桩入口
|
* @return Memcache
|
*/
|
protected function createMemcache() {
|
return new Memcache();
|
}
|
|
protected function formatKey($key) {
|
return $this->prefix . $key;
|
}
|
}
|