如何避免缓存猛击(https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/caching.html#cache-slams)?这个问题与教义无关,但一般来说都是缓存
我需要这样的东西
//pseudo code
// $cacheKey = 'randomCacheKey'.
if(Cache::has($cacheKey)) {
return Cache::get($cacheKey);
}
//do some work
$valueToCache = $this->someComplexTask();
Cache::set($cacheKey, $valueToCache);
return $valueToCache;
问题是,我该怎么做,以避免缓存猛击?例如,如果我有200个并行请求,并且所有这些请求都将注意到没有缓存,则它们都将尝试写入相同的键,从而导致cpu /内存/ db查询等激增。因此,我只需要其中一个即可写入此缓存,而其他所有缓存都应等待。我该怎么办?
[这可能与原子锁有关,但我不清楚如何使用它,因为文档不是我(它太像“ hello world”之类的示例。)>]
我如何避免缓存猛击(https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/caching.html#cache-slams)?这个问题与教义无关,但一般来说我需要缓存...
唯一安全的解决方案是永远不要从用户请求上下文中调用Cache。碰到本地URL刷新缓存数据的cron作业在这种竞争条件和相关的内存流失方面绝对是安全的。