Сеанс базы данных Codeigniter GET LOCK - PullRequest
0 голосов
/ 25 января 2019

У меня есть два веб-сервера с платформой Codeigniter и я использую балансировщик нагрузки, и я хочу сохранить общий сеанс для обоих веб-серверов вместо использования липкого сеанса из балансировщика нагрузки.

Я пытался использовать сеанс базы данных ci. В течение нескольких дней соединения были отличными, пока внезапно не начался медленный запрос, подобный этому:

SELECT GET_LOCK('59e30181bfafeae2d31394d621bab3cc4c401956', 300) AS ci_session_lock;

Запрос может занять от 5 до 15 секунд, что замедляет работу серверов.

Это конфигурация сеанса в config.php

$config['sess_driver'] = 'database';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 0; //expire when the browser is closed 
$config['sess_save_path'] = 'ci_sessions';
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;

Кто-нибудь когда-либо испытывал подобное? Спасибо, прежде чем.

1 Ответ

0 голосов
/ 25 января 2019

Если вы столкнулись с проблемой медленных запросов, вам нужно сохранить сеанс в файлы, а не в базу данных, это сохранит ваш медленный и многократный запрос.

Пример:

$config['sess_driver'] = 'files'; // need to use files

Драйвер хранилища для использования в CI: файлы, база данных, redis, memcached

Затем определите путь tmp:

$config['sess_save_path'] = sys_get_temp_dir();

Согласно PHPmanual, sys_get_temp_dir() Возвращает путь к каталогу, используемый для временных файлов

Вы также можете установить конкретную папку для сохранения сеанса в $config['sess_save_path'] как:

$config['sess_save_path'] = 'session_folder'; // this will save session on root inside **session_folder** folder.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...