Codeigniter数据库会话GET LOCK

时间:2019-01-25 14:58:29

标签: php session codeigniter-3

我有两个运行Codeigniter框架并使用负载平衡器的Web服务器,我想存储两个Web服务器的共享会话,而不是使用负载平衡器中的粘性会话。

我尝试使用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 :(得分:0)

如果您遇到查询缓慢的问题,则需要将会话保存到文件而不是数据库中,这将保存您的多次查询缓慢请求。

示例:

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

要在CI中使用的存储驱动程序:文件,数据库,redis,memcached

然后定义tmp路径:

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

根据PHP手册,sys_get_temp_dir()返回用于临时文件的目录路径

您还可以设置特定的文件夹以将会话在$config['sess_save_path']中保存为:

$config['sess_save_path'] = 'session_folder'; // this will save session on root inside **session_folder** folder.