我们正在将应用程序从PHP5.4迁移到PHP7.3。该应用程序使用memcached存储会话数据,使用AJAX请求显示与会话相关的信息。
session.save_handler = memcached
session.save_path = "localhost:11211"当并发的 AJAX请求试图读取会话时,Memcached行为是不一致的,有些失败导致错误:
session_start(): Failed to read session data: memcached (path: localhost:11211)在同一页上,当重新加载页面时,相同的AJAX请求可能成功或失败。
当应用程序使用PHP5.4运行时,没有发生这种行为。
如果使用文件会话处理程序(默认值php.ini):
session.save_handler = files
session.save_path = "/var/lib/php/sessions"那么错误就不再发生了,所有的请求都成功了。
禁用会话锁定也解决了以下问题:
memcached.sess_locking = Off我不喜欢禁用会话锁定,因为它可能会导致其他并发访问问题。
是否有人有类似的经验或知道出路?提前感谢
PS:以前的配置很好
Debian 7, PHP 5.4, memcached 2.0.1 and libmemcached 1.0.8发生错误的新配置:
Debian 9, PHP 7.3, memcached 3.1.13 and libmemcached 1.0.18.发布于 2019-11-18 13:23:04
增加“重试锁定会话锁的次数”可以减少失败次数。
memcached.sess_lock_retries = 50默认值为5。
在我的例子中,当错误增加到至少30个时,不会再发生错误。我已经把它设为50,希望它足够了。
https://stackoverflow.com/questions/58875733
复制相似问题