Memcached PHP会话错误:session_start():无法读取会话数据

时间:2019-02-23 13:44:35

标签: php session memcached codeigniter-3

我的Web应用程序使用 CodeIgniter 3.1.10 作为框架和 php 7.1 ,并且我想尝试使用 memcached ,因为我计划使用 loadbalancer 和多个Web服务器。

我在 config.php 中设置会话配置,如下所示:

$config['sess_driver'] = 'memcached';
$config['sess_save_path'] = 'localhost:11211?timeout=10&read_timeout=10&persistent=1';

到目前为止,我已经成功设置了Memcached服务器并能够存储会话,但是 memcached并不太一致 。有时它会返回如下错误:

session_start(): Failed to read session data: user (path: localhost:11211)

特别是在一页上,有多个同时调用的ajax。像上面那样,经常有一两个ajax返回错误。但是当我使用 files session 进行设置时,ajax正常工作(永远不会返回任何会话错误)。

下面是在php.ini上设置的memcached配置

memcached.compression_factor    1.3 1.3
memcached.compression_threshold 2000    2000
memcached.compression_type  fastlz  fastlz
memcached.default_binary_protocol   0   0
memcached.default_connect_timeout   0   0
memcached.default_consistent_hash   0   0
memcached.serializer    php php
memcached.sess_binary_protocol  1   1
memcached.sess_connect_timeout  0   0
memcached.sess_consistent_hash  1   1
memcached.sess_lock_expire  0   0
memcached.sess_lock_max_wait    not set not set
memcached.sess_lock_retries 5   5
memcached.sess_lock_wait    not set not set
memcached.sess_lock_wait_max    2000    2000
memcached.sess_lock_wait_min    1000    1000
memcached.sess_locking  1   1
memcached.sess_number_of_replicas   0   0
memcached.sess_persistent   0   0
memcached.sess_prefix   memc.sess.  memc.sess.
memcached.sess_randomize_replica_read   0   0
memcached.sess_remove_failed_servers    0   0
memcached.sess_sasl_password    no value    no value
memcached.sess_sasl_username    no value    no value
memcached.sess_server_failure_limit 0   0
memcached.store_retry_count 2   2

有人有类似经验或知道出路吗?预先感谢

1 个答案:

答案 0 :(得分:0)

问题在于这些值:

memcached.sess_lock_wait_max    2000    2000
memcached.sess_lock_wait_min    1000    1000
memcached.sess_locking  1   1

了解每个ajax调用将独立运行,这意味着它们将根据需要请求session_lock。当锁定尝试失败时,它将使等待时间加倍,然后重试,直到达到wait_max为止。换句话说,您的配置指出如果您尝试锁定但失败,请不要打扰。

解决方案是降低您的wait_min并增加您的wait_max。应该可以解决您的问题。 还有另一个变量可以自动释放锁,这应该可以解决您遇到的赛车问题。