如何在Node.js&amp ;;中避免狗堆效应MongoDB& Redis堆栈?

时间:2015-06-05 13:21:18

标签: javascript node.js mongodb caching redis

当某些缓存值过期或由于任何原因生成新缓存时,如果没有缓存存在,则会产生大量流量,MongoDB上的负载会很大,响应时间会显着增加。这通常被称为“狗堆效应”。创建缓存后,一切正常。

我知道这是一个非常常见的问题,它适用于使用数据库的所有Web应用程序。缓存系统。

应该怎样做才能避免在Node.js& MongoDB&堆栈Redis?什么是最佳做法和常见错误?

2 个答案:

答案 0 :(得分:2)

一种相当成熟的防止狗堆积的方法是保持“锁定”(例如在Redis中),以防止缓存填充逻辑多次启动。第一次调用提取器(对于给定的内容),获取锁(对于它)并设置为到期(例如,使用SET ... NX EX 60)。获取该内容的任何后续调用都将失败,因此只有一只狗可以进入该堆。

您可能想要实现的另一件事是对提取器进行某种速率限制,无论内容如何。使用Redis也很容易实现 - 随意查看或提出另一个问题:)

答案 1 :(得分:0)

Id只提供过期内容,直到新内容完成缓存,以便数据库不会发生踩踏事件。