什么是PHP共享内存分配(mm,compiled --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服务器重新启动会将其删除。
我真的很喜欢规范的描述,但感谢任何和所有信息。
答案 0 :(得分:0)
我没有在会话中使用共享内存,但是最近我一直在使用https://www.php.net/manual/en/book.shmop.php,这似乎是用于会话的东西。
共享内存的妙处在于,它是在进程之间共享数据的一种疯狂的快速方法。这样做的代价是,由于您只是直接存储在内存中,因此无法控制谁在何时写入(并且不是持久的)。在内存文件系统中使用文件会话可以解决此问题,方法是在顶部添加文件系统层(REDIS和memcached也可以解决此问题)。
如果您在会话中写了很多东西,并且有机会同时运行两个请求,那么您有时会得到意外的数据。 不管是什么问题,都取决于您需要多少会话数据。
如果只写一次,然后又全部读完,例如在登录时存储用户ID,那么它应该很好用。
关于GC,会话模块之间应该没有区别。