Jef*_*eff 10 php linux session module
什么是PHP共享内存分配(mm,编译--with-mm)会话模块?
你用过吗?你测试过吗?它运作良好吗?你有会话锁定问题吗?
使用文件或自定义会话处理程序(如数据库)时,很容易查看会话数据的内容,但是可以使用此模块查看会话数据吗?想要查看会话数据的个人原因是(1)测试PHP垃圾收集是否正常工作,以及(2)确保它不会占用所有系统内存.
我认为它曾经是一个单独的(PECL?Zend?)扩展,但现在它是核心.
将其编译为PHP二进制文件的唯一要求是OSSP mm标题,这是一个小的~330k下载.
$ ./configure --help
// --with-mm=DIR SESSION: Include mm support for session storage
Run Code Online (Sandbox Code Playgroud)
我能找到的唯一信息来自2006年的留言板帖子,引用了一个现在缺少的Zend会话教程页面[404],作者引用了该文章:
如果您需要更高的性能,mm模块是一个可行的替代方案; 它将数据存储在共享内存中,因此不受硬件I/O系统的限制.
我理解其中两个限制:
(1)请注意,mm的会话存储模块不保证正确锁定对同一会话的并发访问.使用基于共享内存的文件系统(例如Solaris/Linux上的tmpfs或BSD上的/ dev/md)在文件中存储会话可能更合适,因为它们已正确锁定.(2)会话数据存储在内存中,因此Web服务器重新启动将其删除.
我真的很喜欢规范的描述,但任何和所有信息都表示赞赏.
小智 1
我没有在会话中使用共享内存,但我最近一直在使用https://www.php.net/manual/en/book.shmop.php,这似乎是用于会话的。
共享内存的奇妙之处在于它是一种在进程之间共享数据的快速方式。这样做的代价是,由于您只是直接存储在内存中,因此无法控制谁在何时写入(并且它不是持久的)。在内存文件系统中使用文件会话可以通过在顶部添加文件系统层来修复此问题(REDIS 和 memcached 也可以处理此问题)。
如果您向会话写入大量数据并且有合理的机会同时运行两个请求,您将在某个时刻获得意外数据。无论这是什么问题,都取决于您对会话数据的依赖程度。
如果你只写一次,然后全部读取,比如在登录时存储用户 ID,那么它应该工作得很好。
关于GC,会话模块之间应该没有区别。
| 归档时间: |
|
| 查看次数: |
1411 次 |
| 最近记录: |