开发者社区> 问答> 正文

PHP使用Windows下的Memcache做session_handler莫名其妙丢失 ,什么原因?

落地花开啦 2016-06-13 14:20:05 1014

症状
有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配置,在我本地的windows7(64bit)上面,就没有任何的问题。如果我把服务器上的session_handler换成files,也没有任何的问题。最后我们怀疑是连接数或者win03方面的问题,发现win03在tcp连接上没有限制,如果是win03内核的问题,我也木有办法了。。╮(╯_╰)╭

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

存储 缓存 网络协议 Linux PHP Windows
分享到
取消 提交回答
全部回答(1)
  • 落地花开啦
    2019-07-17 19:35:52

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

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

    0 0

集结各类场景实战经验,助你开发运维畅行无忧

推荐文章
相似问题
推荐课程