从同一个缓存中提供两个请求时它叫什么?

时间:2015-12-09 17:39:38

标签: caching parallel-processing distributed-caching

我试图在具有共享缓存的分布式系统中找到以下(和潜在解决方案)的技术术语:

  • 请求A进来,缓存未命中,因此我们开始生成响应 为A
  • 请求B带有相同的缓存密钥,因为A不是 完成但尚未将结果写入缓存,B也是 缓存未命中并开始生成响应
  • 请求A完成并在缓存中存储值
  • 请求B完成并将值存储在缓存中(覆盖请求A的缓存值)

您可以看到这可能是一个大规模的问题,如果不是两个请求,您有许多都会获得缓存未命中并尝试在缓存条目到期后立即生成缓存值。理想情况下,请求B有一种方法可以知道请求A正在为缓存生成一个值,并等到完成后再使用该值。

我想知道这种现象的技术术语,它是各种各样的缓存竞赛。

1 个答案:

答案 0 :(得分:0)

这是一种雷鸣般的牧群

解决方案:当第一个请求A到来并填充一个标志时,如果请求B到来并找到该标志然后等待......在A将数据加载到缓存中之后,删除标志。

如果所有其他请求都被缓存加载事件唤醒,则会触发所有线程" Thundering Herd"。所以还需要关心解决方案。

例如在Linux内核中,只会唤醒一个进程,即使有几个进程依赖于事件。