http://www.php.net/manual/en/intro.shmop.php
Shmop是一组易于使用的函数,允许PHP读取,写入,创建和删除Unix共享内存段.
我不明白,这个扩展目的究竟是什么?它是干什么用的?
如何在脚本执行之间,甚至在不同的会话之间,将变量保存在服务器的RAM中?我是否需要安装某种扩展,或者这是内置到PHP?
提前致谢!
在PHP中是否有一种方法可以使用"会话外"变量,这些变量不会在每个连接处加载/卸载,就像在Java服务器中一样?
请原谅我缺乏准确性,我不知道如何以正确的方式写它.
主要想法是这样的事情:
<?php
...
// $variablesAlreadyLoaded is kind of "static" and shared between all PHP threads
// No need to initialize/load/instantiate it.
$myVar = $variablesAlreadyLoaded['aConstantValueForEveryone'];
...
?>
Run Code Online (Sandbox Code Playgroud)
我已经做过这样的使用shmop和其他奇怪的事情,但如果有一个"干净"的方式来做"纯PHP"而不使用缓存系统(我想到APC,Redis ......),也没有数据库.
编辑1:
由于人们(感谢他们花时间陪我)以同样的方式回答我的会话,我添加了一个我错过了写的约束:没有会话请.
编辑2:
似乎唯一的PHP本机方法是共享内存(shmop)和命名管道.我将使用托管方式访问共享对象,不介意内存管理(共享内存块大小)或系统问题(管道).
然后,我在网上浏览了一个PHP模块/库,它提供了执行此操作的函数/方法:我什么也没找到.
编辑3:
后在路上的几个研究中指出@KFO,看来该putenv/ setenv不作出处理对象(我会避免序列化).因此,它解决了诸如字符串或数字之类的短"事物"的问题,但不解决更大的/ comples对象的问题.
使用"env way"和另一种处理更大对象的方法将是不相干的,并增加了代码和维护的复杂性.
编辑4:
发现这个:DBus(GREE Lab DBus),但我没有工具在工作中测试它.有人测试了吗?
我对每一个建议持开放态度.
谢谢
编辑5("答案"):
由于DBus不是我正在寻找的(需要安装第三方模块,没有"严重"的应用证据),我现在正在使用已经证明其可靠性的Memcache(关注@PeterM评论,见下文).
php persistence share shared-memory inter-process-communicat
我正在尝试实现一个非常非常大的字典搜索来匹配PHP中句子中的单词.我最初的想法是使用Aho-corasick算法,因为Aho-corasick解决了我的确切问题.我首先用PHP实现了一个Trie.Trie在缓存时会生成一个足够快的字典; 但是,它占用大约3mb的内存.这在PHP中无法很好地扩展.
显然,无论我们使用何种数据结构,大型字典都会占用大量内存.我只需要单个字典实例,因为它是静态的,不需要重建.
如果这个对象可以在所有线程之间共享,那么3mb的内存可以忽略不计,但是,我不确定在PHP中的线程之间共享内存的正确方法.
如何在HTTP请求之间共享此对象?当每个线程需要由Trie创建的3mb开销时,我看不到项目缩放.