【问题标题】:How is storing data in $_SESSION different from memcache(d)?在 $_SESSION 中存储数据与 memcache(d) 有何不同?
【发布时间】:2012-02-23 14:52:08
【问题描述】:

明显的区别在于,当存储在memcache(d) 中时,数据变得可以跨系统使用。会话存储每个用户的数据,不过,session_id() 理论上可以用于与更多用户共享这些数据。

但是,在性能、速度和内存使用方面 - 有区别吗?

【问题讨论】:

  • 你忘记了 _SESSION 不在内存中。
  • @rdlowrey,哇。谁告诉你文件系统比 memcache(d) 提供的内存存储慢?更何况没有考虑硬件是不是SSD。
  • 每个建议 memcache 更快的人似乎都在假设一个本地 memcache 服务器(与应用程序安装在同一台机器上)。可能是这种情况,当跨网络使用时,它会非常依赖于网络。
  • @Guy:内存(RAM)总是比硬盘快。写入 HDD(经典)是最痛苦的操作之一。

标签: php session memcached


【解决方案1】:

默认情况下,PHP 会话存储在文件系统中。您可以修改此行为,以便将它们保存在数据库中,或者在您的情况下保存在 memcached 中。

所以在性能方面,memcached通常比文件系统快。 这显然取决于你的环境。

session_set_save_handler

【讨论】:

  • 请分享告诉文件系统比 memcached 慢的源代码。
  • @Guy 显然这取决于您的硬件和各自硬件上的负载。 一般你会发现你的 7.2k RPM 硬盘比你的内存慢
  • @Guy - 你真的需要一个“资源”来解释硬盘驱动器比随机存取存储器慢吗?如果是,请随时在 wikipedia 上查看一些数字或将 hdds 与 ram 进行比较。快速事实:ram 访问时间以纳秒为单位,数据速率以千兆字节为单位(我们目前可以获得 32gigs),而即使是 ssd 也无法与以微秒的寻道时间实现约 500 兆字节/秒的速度相比。
【解决方案2】:

苹果和橙子。他们实现了两件完全不同的事情。您真正的问题是文件存储与内存缓存。理论上,您可以将会话信息存储在 memcache 中,而不是基于文件的存储中。那么会话的性能将与直接将值推送到内存缓存相同。

在所有条件相同的情况下,memcache 的性能远远优于文件缓存。在内存方面,当您读取文件以获取数据(在本例中为会话文件)时,它无论如何都会进入内存,因此它不会节省任何空间。事实上,如果多个请求发生在 apache 上,不同的工作进程可能需要读取同一个会话文件——每个都使用自己的内存块,直到工作进程被收割。使用 memcache,这不会发生。


【讨论】:

    【解决方案3】:

    好吧,您可以简单地将内存缓存用于$_SESSION。这肯定更快,因为它不需要大量调用 PHP API,而是直接调用 C API。

    虽然性能奖励很小,但 PHP 确实没有那么慢。

    如果您要将内存缓存与文件系统会话进行比较:使用内存缓存。确实,您应该将它们简单地存储在内存中,而不是将它们存储在文件系统中。快很多。当然,如果 memcache 服务器过载,您确实有丢失会话数据的风险。 memcache 的内存使用率当然会高于文件系统替代方案。

    【讨论】:

    • 如果我错了,但不是用 C 创建的 PHP API/扩展,请纠正我?
    • 是的,它们是,但是如果你想使用原始的 memcache 函数来存储会话而不是 $_SESSION 替换,它会稍微慢一些,因为 PHP 必须解释和查找每个你调用的函数。
    【解决方案4】:

    会话存储在文件或数据库中。 Memcache 存储在内存中以便更快地访问。

    【讨论】:

      猜你喜欢
      • 2014-04-07
      • 1970-01-01
      • 2011-10-27
      • 1970-01-01
      • 2012-05-03
      • 2012-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多