如何避免在laravel中发生缓存猛击?

问题描述 投票:0回答:1

如何避免缓存猛击(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)?这个问题与教义无关,但一般来说我需要缓存...

php laravel caching redis memcached
1个回答
0
投票

唯一安全的解决方案是永远不要从用户请求上下文中调用Cache。碰到本地URL刷新缓存数据的cron作业在这种竞争条件和相关的内存流失方面绝对是安全的。

© www.soinside.com 2019 - 2024. All rights reserved.