呵呵呵呵呵

萝莉有三好,柔体 轻音 易推倒。女神有三宝,干嘛 呵呵 去洗澡。宅男有三好:Dota 基友 破电脑。


php session性能分析及session的memcache配置

php session性能分析及session的memcache配置

PHP默认session是以文件形式保存在本地文件系统中,每次访问都是做io操作,并发大的时候,必然会导致session文件爆发,导致读取文件变慢。

换一种方式,将session保存到内存或者数据库,性能会提高。
    

默认情况下开启PHP会话,会在服务器端创建一个sess_PHPSESSID文件,返回一个名为PHPSESSID的cookie给浏览器.PHP操作$_SESSION数组添加和访问会话数据.

PHP同一个会话之间共享同一个对象实例:
object通过serialize序列化成string,然后保存到会话变量中:
$_SESSION[object] = serialize($object);
在使用这个会话(PHPSESSID)发出的其他http请求通过反序列化获取对象:
$object = unserialize($_SESSION[object]);
当然,数组也一样可以这样存储到一个会话变量中,非常方便有木有.

PHP会话存储默认使用files,对应php.ini配置项session.save_handler=files
存储位置默认是/tmp,对应session.save_path=/tmp

如果你觉得用文件系统保存会话文件会造成磁盘I/O过大,你完全可以用Memcache/Redis来存储会话.
PECL扩展memcache和redis都提供了session处理器,用于存储PHP会话内容.
http://pecl.php.net/package/memcache
http://php.net/manual/zh/memcache.ini.php
http://pecl.php.net/package/redis
https://github.com/nicolasff/phpredis/

Ubuntu可以这样安装:
sudo apt-get install memcached redis-server
sudo apt-get install php5-memcache php5-redis
pear install pecl/memcache

配置php.ini,加入:
extension=memcache.so
extension=redis.so
再把
session.save_handler = files
session.save_path = "/tmp"
改为(memcache):
session.save_handler = memcache
session.save_path = "tcp://127.0.0.1:11211"
改为(redis):
session.save_handler = redis
session.save_path = "tcp://127.0.0.1:6379"

session.save_path中多台memcache/redis服务器可以用逗号隔开.
session.save_path里的URL还可以可以包含一些参数,比如memcache的persistent,weight,timeout,retry_interval.

更多内容:

php.ini中session.gc_probability 为0的意思
ubuntu不启动图形界面
使用js Math.random()函数生成随机数字
php逐行读取文件fgets示例
windows下获取/设置socket缓冲区大小示例

本文链接地址:http://www.hehehehehe.cn/i/789.html