| <?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; | 
|     } | 
| } |