基于PHP Memcache(d)的会话:是否应禁用垃圾收集?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于PHP Memcache(d)的会话:是否应禁用垃圾收集?相关的知识,希望对你有一定的参考价值。

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

似乎这可能是合乎逻辑的,原因如下:

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

B)要清除memcached本身未清除的现有会话,memcached扩展必须完全转储存储在memcache守护程序中的所有数据,检查每个键以查看该键是否与定义的模式匹配,然后检查添加密钥的时间,最后根据需要删除。这不太可能是由于以下原因:1)据我所知,没有什么可以告诉你什么时候将密钥添加到memcache。只有当它到期时。 2)转储+解析在memcache实例上会超级重。

然后,很可能,memcached)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

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

但你仍然需要设置设置!

以上是关于基于PHP Memcache(d)的会话:是否应禁用垃圾收集?的主要内容,如果未能解决你的问题,请参考以下文章

基于LNMP实现动静分离,PHP+Memcached实现会话保持

会话 VS 文件 VS Memcache 用于 PHP 中的缓存?

memcache 安装部署(会话保持)

memcache

Memcache--02 源码安装nginx,php

memcache 可以横向扩展吗?