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

时间:2012-10-02 03:18:20

标签: php mysql shared-memory

我需要将一些6-8GB的静态数据存储到共享内存中作为ARRAY OBJECT。从数据库中获取数据。我想fork()并允许子进程根据索引访问和搜索数组中的元素。

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

有什么建议吗?

4 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

如果你想坚持使用shmop:由于shmop_write()使用字符串来存储数据,你也需要在那里使用serialize()方法。

答案 2 :(得分:0)

使用PHP的serialize()函数。

http://php.net/manual/en/function.serialize.php

我建议编写一个负责序列化/反序列化以及写入/读取共享内存的类。

答案 3 :(得分:0)

看来这可以通过PHP的SEM functions完成。

它在内部序列化对象。鉴于数据量庞大,随着数据的增加,性能会大幅下降。 8GB(和上升)对于shmop和SEM来说是太有效了。

我的另一种选择是在需要时简单地查询数据库(同时为每个线程存储本地缓存版本),我认为这会更快(特别是对于SSD)。所以这些功能不适合我去。