什么是PHP共享内存(mm, - with-mm)会话模块?

时间:2013-08-20 14:06:45

标签: php linux session module

什么是PHP共享内存分配(mmcompiled --with-mm)会话模块?

你使用过吗?你测试过吗?它运作良好吗?你有会话锁定问题吗?

使用文件或自定义会话处理程序(如数据库)时,很容易查看会话数据的内容,但是可以使用此模块查看会话数据吗?想要查看会话数据的个人原因是(1)测试PHP垃圾收集是否正常工作,以及(2)确保它不会占用所有系统内存。

我认为它曾经是一个单独的(PECL?Zend?)扩展,但现在它已经成为核心。

将它编译成PHP二进制文件的唯一要求是OSSP mm headers,下载量小〜330k。

 $ ./configure --help

// --with-mm=DIR   SESSION: Include mm support for session storage

我能找到的唯一信息来自2006年的留言板帖子,引用了一个现在缺失的Zend session tutorial page [404],作者引用了该帖子:

  

如果您需要更高的性能,mm模块是一个可行的选择;   它将数据存储在共享内存中,因此不受限制   硬件I / O系统。

我理解其中两个是limitations

  

(1)请注意mm的会话存储模块不保证   正确锁定对同一会话的并发访问。它可能   更适合使用基于共享内存的文件系统(例如   Solaris / Linux上的tmpfs或BSD上的/ dev / md)将会话存储在文件中,   因为它们被正确锁定(2)会话数据存储在存储器中   因此,Web服务器重新启动会将其删除。

我真的很喜欢规范的描述,但感谢任何和所有信息。

1 个答案:

答案 0 :(得分:0)

我没有在会话中使用共享内存,但是最近我一直在使用https://www.php.net/manual/en/book.shmop.php,这似乎是用于会话的东西。

共享内存的妙处在于,它是在进程之间共享数据的一种疯狂的快速方法。这样做的代价是,由于您只是直接存储在内存中,因此无法控制谁在何时写入(并且不是持久的)。在内存文件系统中使用文件会话可以解决此问题,方法是在顶部添加文件系统层(REDIS和memcached也可以解决此问题)。

如果您在会话中写了很多东西,并且有机会同时运行两个请求,那么您有时会得到意外的数据。 不管是什么问题,都取决于您需要多少会话数据。

如果只写一次,然后又全部读完,例如在登录时存储用户ID,那么它应该很好用。

关于GC,会话模块之间应该没有区别。