当使用pecl memcached(或memcache i guess..)扩展时,是否应该通过将概率设置为0来禁用php的会话垃圾收集(例如:session.gc_probability/session.gc_divisor)?
这似乎是合乎逻辑的,原因如下:
a)会话到期时间很可能只是通过设置存储密钥的到期时间来存储的。例:每个会话都有其到期ttl,到期时由memcached清除。
b)要清除未被memcached清除的现有会话,memcached扩展必须对memcache守护进程中存储的所有数据进行完全转储,检查每个密钥是否与定义的模式匹配,然后检查添加密钥的时间,最后根据需要移除。这不太可能,原因如下:1)据我所知,没有人知道何时向memcache添加了密钥。只有当它过期的时候。2)dump+parse对于memcache实例来说是超重的。
那么,memcache(d)pecl扩展很可能只是禁用php的会话垃圾收集?
谢谢。

最佳答案

php ini设置session.gc_maxlifetime定义会话项的过期时间。如果禁用此选项,则会话将永远处于活动状态。
如果你看一下memcached的源代码,就很容易发现它的行为(即使你不理解c):https://github.com/php-memcached-dev/php-memcached/blob/e781e169871fd4f14f844ce3e01860e84ec28831/php_memcached_session.c#L325-L327
默认情况下,expiration设置为0,仅当php ini设置session.gc_maxlifetime设置为大于0时才设置。仅仅因为设置包含gc并没有说明这与phps会话垃圾收集有关。memcached扩展只是解释这个选项,因为它可以利用它。如果使用memcached,则不需要php垃圾收集,因为它将清除自身,并且垃圾收集由扩展本身禁用。
但你还是得设定好设置!

10-02 04:11