首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >什么是PHP共享内存(mm,--具有-mm)会话模块?

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

Stack Overflow用户
提问于 2013-08-20 14:06:45
回答 1查看 2K关注 0票数 13

PHP共享内存分配(mm编译-带毫米)会话模块是什么?

你用过吗?你测试过了吗?效果好吗?你有会话锁定问题吗?

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

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

将其编译为PHP二进制文件的唯一要求是OSSP毫米报头,这是一个较小的330 k下载。

代码语言:javascript
运行
复制
 $ ./configure --help

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

我唯一能找到的信息来自2006年的一篇留言板文章,其中提到了一个现在失踪的Zend会话教程页[404],作者引用了这篇文章的话:

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

我知道其中两个是局限性

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

我真的想要一个规范的描述,但是任何和所有的信息都是非常感谢的。

EN

回答 1

Stack Overflow用户

发布于 2020-04-19 08:47:58

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

共享内存最棒的一点是,它是在进程之间共享数据的一种疯狂的快速方式。这样做的代价是,由于您只是直接存储在内存中,所以无法控制谁在何时(并且它不是持久的)写东西。使用内存文件系统中的文件会话来修复这个问题,这就是在上面添加文件系统层(REDIS和memcached也处理这个问题)。

如果您为您的会话编写了大量内容,并且有合理的机会同时运行两个请求,那么您将在某个时候得到意外的数据。不管这是什么问题,问题在于您需要在多大程度上依赖您的会话数据。

如果您只写了一次,然后就全部读取了,就像在登录时存储一个用户id一样,那么它就会工作得很好。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18337159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档