使用会话减少CPU负载

时间:2010-07-01 14:52:44

标签: php session memory-management cpu-usage reload

我有一个执行以下操作的页面:

  1. 在数据库中执行查询(更确切地说,从用户u中选择u.user_uid,ut.user_metatada,在其中u.uid = ut.uid选择用户名。一个用户可以拥有一个或多个元数据)
  2. 根据查询结果生成数据数组
  3. 对这些数组执行一些复杂的操作(有关此操作的更多信息,请参阅本文)。将最终结果作为数组返回。该数组是包含user_uids的一维数组。
  4. 执行另一个查询并获取user_uid所有元素的user_fullname,user_photo
  5. 在页面中打印查询结果。
  6. 当用户重新加载页面时,将从头开始执行这5个操作。为了避免每次用户重新加载页面时执行所有这5个操作,我们可以在会话中保存最终结果(操作号5)。所以我们可以说:

    If session is not set
     Perform those 5 operations
    else
     Print session values
    

    这将减少CPU负载,但需要一些(我不知道多少)内存而不是在会话中保存信息。但是有人认为加载CPU而不是内存更好。 问题:你建议我做什么?是否使用会话(在我的情况下)?还有其他更好的解决方案吗?

4 个答案:

答案 0 :(得分:3)

使用APCMemcached。它们是内存键值缓存,专为此目的而设计。 如果需要,可以在其中存储数组设置到期时间以进行无效。 Facebook uses them减少负荷,所以它们不能坏...... :)

答案 1 :(得分:1)

您还可以使用memcached

之类的内容

如果尝试减少cpu负载或内存更好,则取决于它。

尝试观察你的cpu和内存消耗,这是首先达到它的限制,你应该尝试减少它。

答案 2 :(得分:0)

在你的情况下:你还需要什么,CPU或内存?

如果这5个操作的结果不经常改变,请务必缓存结果(在会话中或磁盘上)。

答案 3 :(得分:0)

您还可以将结果存储在新的DB-Table中。 或者在会话中。

使用的内存取决于访问您网站的用户数量。每个用户都将在session_save_path目录中生成一个新条目(即存储会话信息的地方)。

另请注意,PHP会在一段时间后删除此目录中的旧条目,这意味着下次用户访问您的网页时必须重新生成该值。但这也意味着,内存空间得以保存。