(php) PHP使用Windows下的Memcache做session_handler莫名其妙丢失

症状

有set_session.php和read_session.php两个文件。访问set_session.php,种下session数据。然后访问read_session.php,发现session数据读取正常。不论5分钟后刷新read_sesion.php还是再在别的文件访问,都正常。
但是如果我按住f5键(注意是按住),大约5秒后松开(也就是说浏览器在短时间内刷新了几十、几百次),read_session.php反馈出来的session就为空。这时拿着session_id去memcache里找,发现该key存在,但value为空。

环境

服务器是Windows Server 2003 32bit。使用XAMPP3.1.0,PHP版本是5.4。PHP配置如下:

session.save_handler = memcache
session.save_path = "127.0.0.1:22003"
session.auto_start = 1

MC版本是1.4.4,从http://downloads.northscale.com/memca… 下载的,DLL是http://windows.php.net/downloads/pecl…

诡异之处

我能确定:内存肯定没有满、没有任何其他人访问这台服务器,也没有其他应用运行在上面。
完完全全同样的xampp/php/mc配置,在我本地的windows764bit上面,就没有任何的问题。如果我把服务器上的session_handler换成files,也没有任何的问题。最后我们怀疑是连接数或者win03方面的问题,发现win03在tcp连接上没有限制,如果是win03内核的问题,我也木有办法了。。╮╯_╰╭

这个问题折腾了一整天,最后决定放弃memcache存储,等到换到linux再用mc存储,反正也没什么高负载。但是我们用mc存储其它数据,比如商品啊,分类啊,或者smarty缓存,都很正常,唯独session没法装进去。

Memcached在session数超过一定值后不适合用来存储session。

Memcache采用slab内存预分配,固定长度key的数量是有限的,如果数量占满会依据LRU删除key,造成丢失。

发表评论

电子邮件地址不会被公开。 必填项已用*标注