什么时候不使用memcache

时间:2011-06-03 20:17:54

标签: php memcached

目前,我们正在建立一个网站,可以从我们的父网站进行大量api调用,以获取用户详细信息和其他数据。我们计划在我们这边缓存所有细节。我打算为此使用memcache。因为这是一个实时网站,所以我们期待未来几天的流量更大(不像FB那样,但我的服务器也不像他们一样;))所以我需要你的意见如果我们要去memcache和我们可以面对什么问题你的意见为什么我们不应该去追求它。任何其他选择也会有所帮助。

4 个答案:

答案 0 :(得分:14)

https://github.com/steveyen/community-site/blob/master/db_doc/main/WhyNotMemcached.wiki

Memcached非常棒!但不适用于所有情况......

  • 您的对象大于1MB。
  • 您的密钥大于250个字符。
    • 如果是这样,也许你做错了什么?
    • 并在key size上查看此邮件列表对话以获取建议。
  • 您的托管服务提供商不会让您运行memcached。
    • 如果您使用的是低端虚拟专用服务器(机器的一部分),虚拟化技术(如vmware或xen)可能不是运行memcached的好地方。 Memcached真的想接管并控制一大块内存 - 如果内存被操作系统或管理程序换掉,性能就会消失。但是,使用虚拟化只是为了简化在专用盒子上的部署,这很好。
  • 你在一个不安全的环境中奔跑。
    • 请记住,任何人都可以telnet到任何memcached服务器。如果您使用的是共享系统,请注意!
  • 你想要持久性。或者,一个数据库。
    • 如果你真的希望memcached有一个SQL接口,那么你可能需要重新考虑你对缓存和memcached的理解。

答案 1 :(得分:2)

您应首先为API调用实现通用缓存层。在缓存层的域内,您可以更改要使用的后端策略。如果你看到memcache不适合你可以实际切换(和/或testwise监视它与其他后端相比如何工作)。

更好的是,你可以很容易地在文件系统上编码这个版本(它也有多个后端)而没有依赖另一个守护进程的障碍,所以已经开始使用缓存 - 可能文件系统已经足够你的缓存了需求?

答案 2 :(得分:2)

Memcache很快,但如果你想充分利用它,它也可以使用大量内存。每当您点击磁盘进行I / O时,都会增加应用程序的延迟。拉出经常访问的项目并将它们放在内存缓存上。对于我的大规模部署,我们在那里缓存会话,因为DB和文件系统会话存储都很慢。

建议添加到您的堆栈是APC。它缓存PHP文件并减少每页的总内存使用量。

答案 3 :(得分:2)

替代方案:Redis

Memcached显然受到可用内存的限制,并且在达到内存阈值时将开始抛弃数据。您可能希望查看redis与memcached一样快(在某些基准测试中更快),但允许使用易失性和非易失性键,更复杂的数据结构,以及使用虚拟内存放置至少的选项最近使用的(LRU)键值到磁盘。