作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
当某些缓存值过期或由于某种原因将生成新的缓存并且我们在不存在缓存时有巨大的流量时,MongoDB
和响应时间将承受沉重的负载显着增加。这通常称为“狗桩效应”。创建缓存后一切正常。
我知道这是一个非常普遍的问题,适用于所有使用数据库和缓存系统的 Web 应用程序。
在 Node.js
& MongoDB
& Redis
堆栈中,应该怎么做才能避免狗桩效应?最佳做法和常见错误是什么?
最佳答案
防止狗堆积的一种相当成熟的方法是保持“锁”(例如在 Redis 中)以防止缓存填充逻辑多次触发。第一次调用 fetcher(对于给定的内容),(为它)获取锁并设置为过期(例如使用 SET ... NX EX 60)。对该内容的提取器的任何后续调用都将无法获得锁定,因此只有一只狗会得到一堆。
您可能想要实现的另一件事是对抓取程序进行某种速率限制,无论内容如何。使用 Redis 也很容易做到这一点 - 请随意查找或提出其他问题 :)
关于javascript - 如何避免 Node.js & MongoDB & Redis 堆栈中的狗桩效应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30667647/
图像显示,但不转换。 CSS 代码显示在上传的页面上。 我正在使用 EverWeb 构建页面。 下面是我正在尝试的代码。提前致谢。 HTML 片段 CSS .image { width: 100
我是一名优秀的程序员,十分优秀!