您好,欢迎访问一九零五行业门户网

Web提速:避免php session拖慢运行速度

web提速:避免php session拖慢运行速度
一、what--并发访问,阻塞执行
1.1 不使用session
文件index.php:

文件ajax.php、ajax2.php、ajax3.php的内容都是
fd, lock_ex);该操作以互斥锁定的方式打开文件。在110行关掉文件close(data->fd);。
看到这里,我们应该得到的结论是:
在默认情况下,所谓的php session锁其实就是文件锁
所以,当我们使用session_set_save_handler来自定session操作,改用memcache或其他介质时,只要我们在sessionhandlerinterface的接口中没有锁的逻辑,那么session锁自然也不会存在。作者私下也做了这样的实验,实践证明也的确如此。
五、how -- 如何避免session锁带来的阻塞现象
首先,session锁不一定是坏事情,在一种情况下就非常好用,例如某接口对与同一个用户的请求默认同一时刻只能执行一次。这种时候,就可以用seesion_start()和session_write_close()把要阻塞的代码括起来。非常简单暴力实用。
但是大部分时候我们还是要避免这种锁的存在,解决方案:
1、在用完session的时候就马上session_write_close()掉,释放session锁
2、采用没有锁的session操作,如章节4中所说的用session_set_save_handler来自定义一个没有锁的session操作。
3、再使用默认php session时,个人比较中意的一个方案:大部分情况下,我们对session的操作基本上都是读操作,写操作一般都比较少。这种时候,我们可以自己写一个session类。
构造函数:将session读入cache,关闭session锁
写操作:打开session锁,写入值,关闭session锁
读操作:直接读cache
部分代码如下:
//将session读入全局变量$_seesionstatic private function init(){if(self::$not_init){ session_start(); session_write_close(); self::$not_init = false;}}
//读sessionstatic public function get($name){self::init();return $_session[$name];}
//写sessionstatic public function set($name, $val){session_start();$_session[$name] = $val;session_write_close();}
注意:如果是写操作频繁的操作,就不适合使用该方法。
其它类似信息

推荐信息