Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP shmop如何在共享内存中存储数组_Php_Mysql_Shared Memory - Fatal编程技术网

PHP shmop如何在共享内存中存储数组

PHP shmop如何在共享内存中存储数组,php,mysql,shared-memory,Php,Mysql,Shared Memory,我需要将大约6-8GB的静态数据作为数组对象存储到共享内存中。数据是从数据库中提取的。我想使用fork()并允许子级根据索引访问和搜索数组中的元素 就我而言,我只能使用shmop()存储“字符串”。但是我想存储一个PHP识别为数组对象的数组 有什么建议吗?shmop只能真正存储字符串。要存储数组,您需要在存储它之前对其进行序列化,并在使用它之前取消序列化。您始终可以序列化ArrayObject并使用Memcached将其存储在内存中 如果您想坚持使用shmop:因为shmop\u write()

我需要将大约6-8GB的静态数据作为数组对象存储到共享内存中。数据是从数据库中提取的。我想使用fork()并允许子级根据索引访问和搜索数组中的元素

就我而言,我只能使用shmop()存储“字符串”。但是我想存储一个PHP识别为数组对象的数组


有什么建议吗?

shmop只能真正存储字符串。要存储数组,您需要在存储它之前对其进行序列化,并在使用它之前取消序列化。

您始终可以序列化
ArrayObject
并使用Memcached将其存储在内存中

如果您想坚持使用shmop:因为
shmop\u write()
使用字符串存储数据,所以您也需要在那里使用
serialize()
方法。

使用PHP的
serialize()
函数


我建议编写一个类,负责对共享内存进行序列化/反序列化和写入/读取。

看来这可以通过PHP实现

它在内部序列化对象。由于数据量巨大,性能会随着数据的增加而大幅下降。对于shmop和SEM来说,8GB(并且不断上升)的容量太大,无法有效处理

我的替代方法是在需要时简单地查询数据库(同时为每个线程存储本地缓存版本),我认为这会更快(尤其是使用SSD)。所以这些函数不是我要去做的