Проблема с Memcached и php сессиями - PullRequest
2 голосов
/ 19 ноября 2010

У меня есть 2 сервера, на которых запущен каждый экземпляр repcached.Php настроен для сохранения сессий там.

2 сервера реплицированы для избыточности

Проблема в том, что я делаю некоторые тесты с ab.Выполняется

ad -n 10000 -c 500 http://mysite

В журнале ошибок apache появляются некоторые ошибки, из-за которых не удалось записать данные сеанса

При просмотре listen_disabled_num на обоих серверах это 0, поэтому никакие соединения не обслуживаются1010 *

Кстати, у меня установлено максимальное количество соединений 4096

Есть идеи?

Спасибо

1 Ответ

0 голосов
/ 19 ноября 2010

У меня была эта проблема раньше, когда данные сеанса были больше, чем барьер Memcache в 1 МБ.Я решил это путем сжатия данных сеанса до их сохранения в Memcache.

Вот код, который я использую:

<?php
class SessionHandler {
    public $lifeTime;

    public function __construct() {
        $this->lifeTime = intval(ini_get("session.gc_maxlifetime"));

        session_set_cookie_params(0,"/",".domain.com",false,true);
        session_name("SITESESSION");
        session_set_save_handler(array (&$this,"open"),array (&$this,"close"),array (&$this,"read"),array (&$this,"write"),array (&$this,"destroy"),array (&$this,"gc"));
        session_start();
    }

    public function open($savePath,$sessionName) {
        return true;
    }

    public function close() {
        return true;
    }

    public function read($sessionID) {
        # The default miss for MC is (bool) false, so return it
        return MC::get("userSession_{$sessionID}");
    }

    public function write($sessionID,$data) {
        # This is called upon script termination or when session_write_close() is called, which ever is first.
        return MC::set("userSession_{$sessionID}",$data,$this->lifeTime,true); # The last true sets it as compressed.
    }

    public function destroy($sessionID) {
        # Called when a user logs out...
        return MC::delete("userSession_{$sessionID}");
    }

    public function gc($maxlifetime) {
        # The MC keys expire on their own, no need to do anything here.
        return true;
    }
}
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...