Submarino.com.br

Guardar Sessões em Cache com Zend Framework e Memcached

November 27th, 2008 por xorna |

O post de hoje se dedica a aumentar a performance no armazenamento e recuperação de sessões, mais um dos estudos realizados pela nossa equipe e que foi implantado no nosso projeto. Ele consiste em pega a sessão do usuário e armazenar em um servidor de cache, no nosso caso o memcached.

A implementação é muito simples, você terá apenas que criar uma classe e mudar o modo que cria sua sessão, o resto permanece igual, pois é Zend_Session se encarrega de achar a sessão dentro do cache. Abaixo vai o código da nova classe que deve implementar a interface Zend_Session_SaveHandler_Interface.

class Xorna_SessionHandler implements Zend_Session_SaveHandler_Interface{

private $maxlifetime = 3600;

public $cache = '';	public function __construct($cacheHandler) {

$this->cache = $cacheHandler;

}

public function open($save_path, $name) {

return true;

}

public function close() {

return true;

}

public function read($id) {

if(!($data = $this->cache->load($id))) {

return '';

}

else {

return $data;

}

}

public function write($id, $sessionData) {

$this->cache->save($sessionData, $id, array(), $this->maxlifetime);

return true;

}

public function destroy($id) {

$this->cache->remove($id);

return true;

}

public function gc($notusedformemcache) {

return true;

}

}

?>

Bom, feito isso agora só precisamos instanciar isso, e criar a sessão:

Zend_Loader::loadClass('Xorna_SessionHandler');

$cache = Zend_Cache::factory('Core', 'Memcached', $frontendOptions, $backendOptions);

Zend_Session::setSaveHandler(new Xorna_SessionHandler($_cache));

Zend_Session::start();

Daqui em diante nada muda.

Compartilhe e socialize:
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google
  • E-mail this story to a friend!
  • LinkArena
  • LinkedIn
  • Live
  • Netvibes
  • Socialogs
  • Technorati
  • ThisNext
  • Yahoo! Buzz
  • YahooMyWeb

Um comentáio, que tal mais um?

  1. Roberto Assis says:

    Caro,

    Estou trabalhando com a integração entre dois servidores, vi que com o Memcached pode ser uma solução.

    Você escreveu alguns artigos sobre a memcache, como faço para passar uma ou algumas variáveis de forma segura para outro servidor?

    Eu consigo acessar a memcached por outro servidor? posso criar uma memcached para administrar minhas sessions de vários servidores?

    aguardo resposta, desde já agradeço.

    Roberto

Deixe seu recado

Spam Protection by WP-SpamFree

Clicky Web Analytics