【问题标题】:Avoiding deletion with LRU in session memcache handler避免在会话内存缓存处理程序中使用 LRU 删除
【发布时间】:2013-08-28 03:55:10
【问题描述】:

我已将会话保存处理程序配置为使用内存缓存而不是基于文件的处理程序,因为它在打开多个选项卡时会导致锁定。我已经在 php.ini (session.save_handler = memcache) 中完成了这项工作

因为我的内存缓存已满,我相信这些项目正在通过 LRU 算法被删除。你建议如何克服这个问题?是否有任何简单的保存到磁盘选项,或set 到内存缓存以不删除这些除非过期?

【问题讨论】:

    标签: php database session web-applications memcached


    【解决方案1】:

    确实,memcached 会删除项目以便能够存储新项目。它没有持久化项目的机制。您可以将其设置为不删除项目除非过期,但如果您这样做并且缓存充满未过期的项目,那么它将不接受任何新项目,这意味着没有人将能够开始新会话(或修改现有的)。

    底线:memcached 是缓存,而不是数据库。仅使用它来存储您可以在需要时重新创建的数据。 (另外,请参阅 memcached 常见问题解答条目 Everyone does it!。)

    memcached 可以使用的内存量是在 memcached 服务器启动时设置的。如果服务器上有更多内存,您可以安排它使用更多内存,在这种情况下,它可能会使会话保持更长时间。但这只是推迟了不可避免的事情。 (此外,正如从该常见问题条目链接到的文章所指出的那样,由于 memcached 不具备任何抗故障能力,因此您无法在不丢失 所有 已保存会话的情况下重新启动 memcached 服务器。)

    【讨论】:

    • 您建议如何处理保存会话?正如我所提到的,我在使用文件保存处理程序时遇到了问题,它锁定了文件,并且多个选项卡相互挂起。
    • @Noam:我认为您应该关注导致选项卡式会话保持会话锁定时间过长的问题。也许您需要明确结束会话。恐怕我对 PHP 会话了解不多,但我的猜测是,如果您遇到锁定问题,那么会话保存处理程序将无济于事(选项卡将锁定或会话将被损坏。)也许您应该尝试就会话和选项卡的特定问题提出一个特定问题,而不是假设解决方案是更改会话保存处理程序。
    猜你喜欢
    • 2013-04-21
    • 2014-02-15
    • 2013-02-20
    • 1970-01-01
    • 2011-06-17
    • 1970-01-01
    • 1970-01-01
    • 2014-06-22
    相关资源
    最近更新 更多