百度空间 | 百度首页 
 
查看文章
 
PHP的Session
2009-09-14 15:36

           对PHP的Session不满很久了,一直以来都缺乏一个很好的Storage。默认的file,不看日志还好,一看总会吓一跳,毛毛多的session_start slow(机器负载很轻、IO也没有任何问题),google一下 session_start slow,抱怨的人还真不少。

          存储到Memcache里去吧,Memcache的LRU(slab内LRU,即使Memcache还有空闲内存也会丢失数据)真是一个问题,常常发现Session还没超时,session就找不到需要重新登陆了。咨询了一下张宴,Memcachedb不支持expires,而且还没有办法遍历整个存储,用来作为session的storage就很不合适了。

         一直有一个想法,想做一个Session Server,苦于没有时间总是无法付诸实现(小穆也不赞成,认为不利于以后其它人接手)。不得以,还得在 /dev/shm 下建3级目录(16 * 16 * 16)强撑着(可以说,超过99.99%的情况下,使用本地文件作为session的storage都是Ok的,但偶尔会卡一下,而且一卡就会很严重,甚至达到数十秒级)。

         使用多级目录存储Session,创建目录的脚本PHP已经自带了。但要注意,一旦使用多级目录存储Session、GC也得自己管理了。换句话说,PHP管杀不管埋,过一两天,find看看,目录下已经有几百万个Session文件了。当然,GC也很容易,比较懒,直接在 crontab 里加一行:
*/5 * * * * find /dev/shm -type f -cmin +24 -print | xargs rm -f
就行了


类别:默认分类 | 添加到搜藏 | 浏览() | 评论 (4)
 
最近读者:
 
网友评论:
1
2009-09-14 19:04 | 回复
不是可以用数据库做session吗?另外MySQL的MEMORY类型表速度怎么样?
 
2
2009-09-15 09:01 | 回复
回复ayanamist:使用MySQL做Session的Storage,如果采用Memory表,则必须要求Session的数据比较少,结构固定。这点其实比较难以满足,随着功能的不但增多,强制的要求Session结构固定,就必须将一些新增的数据转移到Memcache中
 
3
2009-09-20 12:35 | 回复
他是你同事吗?
http://blog.s135.com/nginx_php_v5/
 
4
2009-09-21 16:27 | 回复
回复ayanamist:
QQ吧
 
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码: 请点击后输入四位验证码,字母不区分大小写
      

     

©2009 Baidu