代码之家  ›  专栏  ›  技术社区  ›  Toad

如何处理高负载网站memcached中的过期项目(由于TTL)?

  •  3
  • Toad  · 技术社区  · 14 年前

    当峰值为600个请求/秒时,由于TTL过期,memcache刷新一个项目会产生一些非常负面的影响。几乎在同一时间,200个线程/进程发现缓存为空,并触发一个DB请求来再次填充它

    处理这些情况的最佳做法是什么?

    2 回复  |  直到 14 年前
        1
  •  6
  •   integer    14 年前

    如果您有大量请求所需的memcached对象(您的意思是这样的),那么我将考虑使用一个单独的进程或cron作业来定期计算和刷新这些对象。那样的话,它永远不会去TTL。这是一个常见的权衡:在低流量时段添加一点不必要的负载,以帮助减少高峰时段(您可能最关心的时段)的负载。

    我发现这被memcached的人称为“踩踏群”,他们在这里讨论: http://code.google.com/p/memcached/wiki/NewProgrammingTricks#Avoiding_stampeding_herd

        2
  •  0
  •   owenmarshall    14 年前

    如果您的对象过期是因为您设置了过期日期,而它已经过期,那么除了增加过期时间之外,您别无选择。

    • 考虑让缓存成为您正在查看的任何数据的权威源,并创建一个线程,其任务是保持数据的新鲜。这将使其他线程在重新填充缓存时阻塞,因此只有在可以的情况下才有意义