Caching 如何处理高负载网站上memcached中的过期项目(由于TTL)?
当峰值为每秒600个请求时,由于TTL过期,memcache刷新项目会产生一些非常负面的影响。几乎在同一时间,200个线程/进程发现缓存为空,并发出一个DB请求再次填充缓存 处理这些情况的最佳做法是什么Caching 如何处理高负载网站上memcached中的过期项目(由于TTL)?,caching,memcached,high-load,Caching,Memcached,High Load,当峰值为每秒600个请求时,由于TTL过期,memcache刷新项目会产生一些非常负面的影响。几乎在同一时间,200个线程/进程发现缓存为空,并发出一个DB请求再次填充缓存 处理这些情况的最佳做法是什么 p、 这种情况的术语是什么?(让我有机会在这个主题上获得更好的谷歌结果)如果你有大量请求所需的memcached对象(你的意思就是这样),那么我会考虑使用一个单独的进程或cron作业来定期计算和刷新这些对象。那样的话,它永远不会去TTL。这是一个常见的权衡:在流量较低的时间段添加一些不必要的负载
p、 这种情况的术语是什么?(让我有机会在这个主题上获得更好的谷歌结果)如果你有大量请求所需的memcached对象(你的意思就是这样),那么我会考虑使用一个单独的进程或cron作业来定期计算和刷新这些对象。那样的话,它永远不会去TTL。这是一个常见的权衡:在流量较低的时间段添加一些不必要的负载,以帮助减少高峰时段(您可能最关心的时间)的负载 我发现这被memcached的人称为“踩踏群”,他们在这里讨论:
我的下一个建议实际上是使用上面链接中讨论的软缓存限制。如果您的对象因设置了过期日期而过期,那么除了增加过期时间之外,您别无选择 如果您担心过时的数据,可以考虑以下几种技术:
- 考虑让缓存成为您正在查看的任何数据的权威源,并创建一个线程,其任务是保持其新鲜。这将使其他线程在重新填充缓存时阻塞,因此只有在可以的情况下才有意义
- 与其在数据上设置TTL,不如更改任何更新数据的进程以更新缓存。我用于频繁更改数据的一种技术是以概率的方式执行此操作——数据写入的时间有10%是更新的。您可以根据DB查询的开销和陈旧数据的影响程度,对其进行合理的调整