建议将PHP会话存储在MemCache中吗?

我正在使用负载平衡器后面的几个Web服务器,并且我可以启用粘滞会话来让用户访问特定的Web服务器 - 这将起作用。

我一直在阅读关于PHP会话和MemCache。 我必须说,我读过的东西是一种混淆,因为一些页面说它是一个好主意,而另一些则相反。

问题:

  • 是否有可能保持php会话在memcache?
  • 通过memcache使用粘性会话更好吗?
  • memcache中的php会话有什么问题 - 注意:我可以获得足够的缓存(亚马逊,因此它的可扩展性)。

  • 1:是的。 我强烈建议在Memcached中存储PHP会话。 原因如下:

    Memcached非常适合存储数据库和文件系统经常访问的小块数据。

    Memcached专为会议而设计。 它最初是livejournal.com首席开发人员的创意,后来用于缓存用户帖子的内容。 好处是直接的:大部分行动都在记忆中进行。 页面加载时间大大提高。

    谢天谢地,PHP和Apache有一个简单的实现来处理与Memcached的会话。 只需安装几个shell命令即可

    debian的例子:

    sudo apt-get -t stable install php5-memcached
    

    改变你的php.ini设置为类似于:

    (摘自http://www.dotdeb.org/2008/08/25/storing-your-php-sessions-using-memcached/)

     session.save_handler = memcache
     ; change server:port to fit your needs...
     session.save_path="tcp://server:port?persistent=1&weight=1&
    timeout=1&retry_interval=15"
    

    关键是session.save_path

    它不会再指向服务器上的相对文件路径。 APC被提及 - APC用于缓存该程序使用的.php文件。 APC和Memcached将显着降低IO,让Apache免费更快地为资源(如图像)提供服务。

    2:

    3: 使用Memcached的根本缺点是数据波动

    会话数据在Memcached中不是持久的。 因此,如果服务器崩溃,内存中的所有数据都将丢失。 每个人都必须重新登录。

    然后你有内存消耗...

    请记住:会话存储在内存中。 如果你的网站处理大量的并发用户,你可能不得不花更多的钱来获得更大的内存分配。

    最后,延迟(不愚蠢)

    这一切都是透视的除非您打算将所有操作保留在一台机器上,否则最终将通过服务器网络扩展您的memcached群集。 (这是水平扩展)当没有通过适当数量的硬件来处理负载需求时,延迟会对性能和吞吐量产生巨大影响。

    例如,我的Amazon EC2实例的延迟时间大约为80毫秒,而我的应用程序中最昂贵的操作需要大约70毫秒才能执行并缓存单个页面。 一些最快的页面需要1-2毫秒,但现在需要80毫秒的惩罚81毫秒。 因此,不要以为增加2台服务器会使我的容量“三倍”,我会错的。 5-10台服务器,也许? 升级后没有确定最佳数量的公式,因为要知道的唯一方法就是测量流量,并在需求到达时启动新服务器。 另一个$$$的考虑,但你可以便宜地扩展到无穷大,因为用更多的硬件获得更多带宽一直是容易的部分!


    1.是的,可以将PHP会话保存在memcached中。

    memcache扩展甚至带有一个会话处理程序,只需很少的配置即可启动并运行。 http://php.net/manual/en/memcached.sessions.php

    2. Memcache /粘滞会话

    我不知道哪个“更好”。 我觉得这将成为那些“取决于”的答案之一。 这可能取决于您的负载平衡原因。 如果少数用户每个都会造成很多负载,或者每个用户都会造成很大的负载。

    3. Memcache的缺点

    使用memcache进行会话存储可能有两个主要缺点。

    首先,它是不稳定的。 这意味着,如果您的某个memcached实例重新启动/崩溃等,那么存储在该实例中的任何会话都将丢失。 而如果他们正在使用传统的基于文件的会话,他们将在服务器返回时仍然在那里。

    其次,也许更相关,memcached不保证持久性,它只是一个缓存。 无论出于何种原因,数据都可以随时从memcached中清除。 实际上,应该清除数据的唯一原因是缓存接近其大小限制。 最近最少访问的数据将被驱逐出境。 同样,这可能不是问题,因为如果用户的会话过期,用户可能会离开,但这取决于您的需求。


    作为我的观点,不建议将会话存储在Memcached中。如果会话消失,用户通常会注销,如果缓存的一部分消失或者由于硬件崩溃,它不应该导致用户的痛苦。根据memcached站点“,memcached是一个高性能,分布式内存对象缓存系统,通常属于本质,但旨在通过减轻数据库负载来加速动态Web应用程序。”因此,在开发应用程序时,请记住您必须拥有一旦在Memcached服务器中找不到数据,回退机制即可检索数据。

    链接地址: http://www.djcxy.com/p/68279.html

    上一篇: Is it recommended to store PHP Sessions in MemCache?

    下一篇: Error while Parsing json into scala case class