当某些缓存值过期或由于任何原因生成新缓存时,如果没有缓存存在,则会产生大量流量,MongoDB
上的负载会很大,响应时间会显着增加。这通常被称为“狗堆效应”。创建缓存后,一切正常。
我知道这是一个非常常见的问题,它适用于使用数据库的所有Web应用程序。缓存系统。
应该怎样做才能避免在Node.js
& MongoDB
&堆栈Redis
?什么是最佳做法和常见错误?
答案 0 :(得分:2)
一种相当成熟的防止狗堆积的方法是保持“锁定”(例如在Redis中),以防止缓存填充逻辑多次启动。第一次调用提取器(对于给定的内容),获取锁(对于它)并设置为到期(例如,使用SET ... NX EX 60)。获取该内容的任何后续调用都将失败,因此只有一只狗可以进入该堆。
您可能想要实现的另一件事是对提取器进行某种速率限制,无论内容如何。使用Redis也很容易实现 - 随意查看或提出另一个问题:)
答案 1 :(得分:0)
Id只提供过期内容,直到新内容完成缓存,以便数据库不会发生踩踏事件。