首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

Zend Framework 將 Session 存儲至 Memcached 實作指南

     編輯:PHP 綜合知識

Zend Framework 原生支援資料庫存儲 Session,但缺乏 Memcached 適配器。本文提供完整的 Zend_Session_SaveHandler_Memcached 實現,支援多伺服器分布式部署。

一、SaveHandler 核心類

文件位置:Zend/Session/SaveHandler/Memcached.php,實現 Zend_Session_SaveHandler_Interface。

class Zend_Session_SaveHandler_Memcached implements Zend_Session_SaveHandler_Interface {
    const LIFETIME = 'lifetime';
    const OVERRIDE_LIFETIME = 'overrideLifetime';
    const MEMCACHED = 'memcached';
    protected $_lifetime, $_overrideLifetime, $_memcached;
    public function __construct($config) {
        if ($config instanceof Zend_Config) $config = $config->toArray();
        foreach ($config as $k=>$v) {
            switch ($k) {
                case self::MEMCACHED: $this->createMemcached($v); break;
                case self::LIFETIME: $this->setLifetime($v); break;
                case self::OVERRIDE_LIFETIME: $this->setOverrideLifetime($v); break;
            }
        }
    }
    public function createMemcached($config) {
        $mc = new Memcache;
        foreach ($config as $server) $mc->addServer($server['ip'], $server['port']);
        $this->_memcached = $mc;
    }
    public function read($id) {
        $val = $this->_memcached->get($id);
        if ($val && $this->_getExpirationTime($val) > time()) return $val['data'];
        if ($val) $this->destroy($id);
        return '';
    }
    public function write($id, $data) {
        $insert = array('modified'=>time(), 'data'=>(string)$data);
        $val = $this->_memcached->get($id);
        $insert['lifetime'] = $val ? $this->_getLifetime($val) : $this->_lifetime;
        return $val ? $this->_memcached->replace($id, $insert) : $this->_memcached->add($id, $insert, false, $this->_lifetime);
    }
    public function destroy($id) { return $this->_memcached->delete($id); }
    public function gc($maxlifetime) { return true; }
    // 輔助方法 _getLifetime, _getExpirationTime, setLifetime, setOverrideLifetime 等...
}

二、配置與啟用

$config = array(
    'memcached' => array(
        array('ip'=>'192.168.0.1', 'port'=>11211)
    ),
    'lifetime' => 123334
);
Zend_Session::setSaveHandler(new Zend_Session_SaveHandler_Memcached($config));
Zend_Session::start();

支援多台 Memcached 伺服器自動分布式存儲。

三、使用方式

配置完成後,Zend_Session 所有操作(讀寫銷毀)自動走 Memcached,業務代碼無需任何修改。

更多 Zend 相關技術請參考專題:《Zend Framework 入門教程》、《PHP 優秀開發框架總結》、《Yii 框架入門及常用技巧總結》、《ThinkPHP 入門教程》、《PHP 面向對象程序設計入門教程》、《PHP+MySQL 數據庫操作入門教程》及《PHP 常見數據庫操作技巧匯總》。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved