迁移到 PHP 7 后,不一致的 Memcached PHP 会话读取错误

Inconsistent Memcached PHP session read error after migrating to PHP 7

我们正在将应用程序从 PHP 5.4 迁移到 PHP 7.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请求可能成功也可能失败

当应用程序是 运行 PHP 5.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.

增加 "number of times to retry locking the session lock" 会减少失败的次数。

  memcached.sess_lock_retries = 50

默认值为 5。

在我的例子中,当增加到至少 30 时不再发生错误。 我已将其设置为 50,希望它足够了。