如何在PHP中的http请求之间存储不可序列化的对象?

时间:2012-11-16 14:54:13

标签: php listener daemon

在我的网络应用程序中,我使用Amazon ECS PHP Class来获取有关亚马逊产品的数据。目前,我为每个页面请求创建新对象。初始化对象需要大约1000毫秒,从亚马逊获取数据需要100毫秒。

我的问题是如何避免每个用户请求的对象创建?我不确定它在PHP中是否可行,因此请随意提出替代解决方案。

我认为我需要创建一个小程序,它将在服务器上运行并侦听来自PHP的请求,从Amazon获取数据并将其返回给PHP。请建议我是否正确,并告诉我应该注意什么?

2 个答案:

答案 0 :(得分:2)

这里有一些技巧可以帮助你:

  • 您正在使用的课程是故意添加1秒延迟,以避免达到亚马逊的限制(AmazonECS::requestDelay($enable = null))。
  • 您不应该序列化AmazonECS的实例,因为它只是Amazon ECS API的接口,并且不包含您想要的数据。
  • 您应该在用户的会话中缓存您在AmazonECS实例上执行的请求的结果。

这是一个粗略的例子(之前我没有使用过AmazonECS,也没有提供任何代码):

session_start(); // remove this if you are already doing it somewhere else

$amazon = new AmazonECS($accessKey, $secretKey, $country, $associateTag);

$myQuery = 'my query';

if (isset($_SESSION['amazon_ecs_cache'][$myQuery]) {
     // use the cached data in the session
     $myData = $_SESSION['amazon_ecs_cache'][$myQuery];
} else {
     // get the data from amazon
     $myData = $amazon->search($myQuery);
     // cache it so we don't have to get it again next time
     $_SESSION['amazon_ecs_cache'][$myQuery] = $myData;
}

// do fun stuff with $myData here
var_dump($myData);

答案 1 :(得分:1)

如果要序列化的对象不可序列化,只需创建一个 可序列化的对象,并带有您真正感兴趣的值。