4

当使用 pecl memcached(或者我猜是 memcache..)扩展时,是否应该通过将概率设置为 0 来禁用 php 的会话垃圾收集(例如:session.gc_probability / session.gc_divisor)?

由于以下原因,这可能是合乎逻辑的:

A)会话到期时间很可能通过在存储的密钥上设置到期时间来简单地存储。EG:每个会话都有其到期 ttl,并在到期时由 memcached 简单地清除。

B) 要清除 memcached 本身未清除的现有会话,memcached 扩展必须对存储在 memcache 守护程序中的所有数据进行完全转储,检查每个键以查看该键是否与定义的模式匹配,然后检查何时添加密钥,最后根据需要删除。这不太可能,原因如下: 1) 据我所知,无法确定何时将密钥添加到 memcache。只有当它到期时。2) 转储 + 解析对 memcache 实例来说会非常繁重。

再说一遍,memcache(d) pecl 扩展很可能只是禁用了 php 的会话垃圾收集?

谢谢。

4

1 回答 1

8

PHP ini 设置session.gc_maxlifetime定义会话条目的到期时间。如果您禁用此选项,您的会话将永远处于活动状态。

如果您查看 Memcached 源,很容易发现行为(即使您不懂 C):https://github.com/php-memcached-dev/php-memcached/blob/e781e169871fd4f14f844ce3e01860e84ec28831/php_memcached_session。 c#L325-L327

过期默认设置为 0,并且仅在 PHP ini 设置session.gc_maxlifetime设置为大于 0 的情况下设置。仅仅因为设置包含 agc并不表示这与 PHP 会话垃圾收集有关。Memcached 扩展只是解释这个选项,因为它可以使用它。如果您使用 Memcached,则不需要 PHP 垃圾收集,因为它会自行清理,并且扩展本身会禁用垃圾收集。

但是您仍然必须设置设置!

于 2013-06-16T20:03:33.253 回答