在PHP中,我可以使用什么快速临时存储

在PHP中,我可以使用什么快速临时存储,php,storage,Php,Storage,我正在创建一个处理一些图像的小插件。现在,为了向用户报告进度,我有一个小ajax脚本,它将长期轮询结果 现在实习生,我需要一个跟踪处理内容的对象。现在我知道的选项如下 使用PHP会话对象。我不能在这种特定情况下使用它,因为初始过程也是由ajax完成的。因此,主进程是一个ajax调用,而长轮询ajax是另一个ajax调用。他们有两个不同的会话id,因此他们不能很好地通信 第二种选择是使用数据库作为存储。我不知道这是否如此好,因为平均一份工作大约有40次读写。我知道这没问题,但对于这么简单的事情来说

我正在创建一个处理一些图像的小插件。现在,为了向用户报告进度,我有一个小ajax脚本,它将长期轮询结果

现在实习生,我需要一个跟踪处理内容的对象。现在我知道的选项如下

使用PHP会话对象。我不能在这种特定情况下使用它,因为初始过程也是由ajax完成的。因此,主进程是一个ajax调用,而长轮询ajax是另一个ajax调用。他们有两个不同的会话id,因此他们不能很好地通信

第二种选择是使用数据库作为存储。我不知道这是否如此好,因为平均一份工作大约有40次读写。我知道这没问题,但对于这么简单的事情来说似乎有点过分了

如果可能的话,我实际寻找的是一种内存对象。在内存中创建一个小对象,该对象会随着进度快速更新,完成后会被删除

我不知道这是否可能,PHP中是否存在这样的东西,我是否可以利用它。请注意,这将是一个公共插件,因此我需要使用各种系统上可用的方法,没有什么特别之处。

看看“一个开源的高级键值存储”,我想你会喜欢它的

您需要运行Redis服务器,并以不同的方式访问它。PHP选择的客户端是。用法非常简单:

 $client = new Predis\Client($single_server);

 $client->set('library', 'predis');
 $retval = $client->get('library');

您可以使用memcache进行此操作。
作为密钥,您可以使用图像文件的md5散列加上用户ip

数据库使用堆表时,这是个不错的主意。有时服务器上根本没有memcache。

选中

无论php是如何安装的,您都希望在php进程之间实现简单、高度可移植的共享内存吗?使用mysql内存表。没有安装mysql的php非常罕见。

我认为数据库并不是最糟糕的解决方案。如果你认为写在磁盘上,可能会更糟

Memcache很好,但你需要一个“无外部插件”的小插件,可以在win、linux、mac等平台上轻松运行。。。这不是一个好的选择


如果您使用Mysql,您可以使用内存引擎表,witch很快,并使用一个简单的垃圾收集器算法定期截断或清理它。如果内存表不是一个选项,innodb就足够了。

也许吧?我也不关注你的会话问题。使用cookie(它将保存在客户端计算机的本地)@JaredFarrish会话保存在服务器上,读写需要花费大量时间them@micha-哦,我明白了,这是会话超时问题。Cookie可能是一个不错的选择,或者是一个临时表。可能是本地存储?会话的问题是我得到了两个不同的会话id。我花了一个小时才弄明白,我也没有意识到这个问题,但这个环节根本不起作用。我猜两个ajax调用会生成两个不同的会话ID。如果我的插件是供个人使用的,这将是一个很好的选择。但是我正在开发一个公共插件,它将为wordpress用户提供。我不能相信这一点,因为我不认为很多人会有STI可用。+1没问题,这肯定是我可以在个人项目中使用的东西,这是一个了不起的想法。谢谢你的提示。你认为我可以在公共插件中依赖它吗。Memcache不是在所有PHP服务器上都可用,但它被广泛使用,许多应用程序都依赖它。你的插件可以检查它是否在服务器上可用,如果不可用,可以使用临时文件(密钥作为文件名)。是的,我也这么想。如果可用,可以使用memcached,否则可以使用普通数据库。我认为没有必要检查memcache是否可用。内存表的读/写操作几乎和memcache一样快。多做,少写;)但就正确的编程而言。这个数据库是用来做这样的事情的。它将是一个只持续一分钟的对象,而不是实际的数据。数据库只不过是保存数据的结构而已。Memcache也是一种数据库。有时数据库用于存储用户会话,所以为什么不使用它来存储临时值呢。无论如何,在我看来,这种表格是为这样的事情而创建的。是的,我认为memchached不是最好的解决方案。内存表看起来是个好主意。我会仔细研究一下。我不认为我需要定期的垃圾收集器,因为我可以在脚本运行完成后立即进行清理。您是否有一个关于如何准确使用内存引擎表的好链接。垃圾收集器可以帮助您处理在处理结束之前离开页面/进程的进程或用户。它还可以清理存储在操作系统临时文件夹外的临时文件,您可以查看更多信息。