我正在创建一个处理一些图像的小插件。现在要向用户报告进度,我有一个小的ajax脚本,它会长时间轮询结果。
现在实习生我需要一个跟踪处理内容的对象。现在我知道的选项如下。
使用 PHP会话对象。我不能在这种特定情况下使用它,因为初始过程也是由ajax完成的。所以主进程是一个ajax调用,而长轮询ajax是另一个ajax调用。他们有2个不同的会话ID,因此他们沟通不畅。
第二个选项是使用数据库作为存储。我不知道这是不是很好,因为平均工作会有大约40个读/写。我知道这不是问题,但对于这么简单的东西来说似乎有点多了。
如果可能的话,我实际寻找的是一种内存对象。在内存中创建一个小对象,该对象随着进度快速更新,并在完成后删除。
我不知道是否可能,在PHP中存在这样的东西,我可以使用它。请注意,这将是一个公共插件,因此我需要使用各种系统上可用的方法,没什么特别的。
答案 0 :(得分:5)
我认为数据库并不是更糟糕的解决方案。如果你认为用磁盘写,可能会更糟。
Memcache很好,但你需要一个“外部插件免费”小插件,它可以在win,linux,mac等上轻松运行......不是一个好的选择。
如果您使用Mysql,您可以使用内存引擎表,快速,并使用简单的垃圾收集器算法截断或定期清理它。如果内存表不是一个选项,innodb就足够了。
答案 1 :(得分:1)
查看Redis,“开源,高级键值存储”,我想您会喜欢它。
您需要运行Redis 服务器,并使用不同的clients访问它。 PHP的首选客户端是Predis。用法非常简单:
$client = new Predis\Client($single_server);
$client->set('library', 'predis');
$retval = $client->get('library');
答案 2 :(得分:1)
您可以使用memcache。 http://php.net/manual/en/book.memcache.php 作为密钥,您可以使用映像文件的md5哈希加上用户ip。
答案 3 :(得分:1)
数据库在使用堆表时不是一个坏主意。有时你只是在服务器上没有memcache 查看Memory Tables at MySQL documentation
答案 4 :(得分:1)
你想要 easy ,高度可移植,php进程之间的共享内存,无论php是如何安装的?使用mysql内存表。没有安装mysql的php非常罕见。