缓存惊群现象,在各种缓存中都会存在这种现象,这里以Redis为例,提供一种解决思路,留作参考~
首先,所谓的缓存过期引起的“惊群”现象是指,在大并发情况下,我们通常会用缓存来给数据库分压,但是会有这么一种情况发生,那就是当一个缓存数据失效之后会导致同时有多个并发线程去向后端数据库发起请求去获取同一个数据,这样如果在一段时间内同时生成了大量的缓存,然后在另外一段时间内又有大量的缓存失效,这样就会导致后端数据库的压力突然增大,这种现象就可以称为“缓存过期产生的惊群现象”!
代码如下:
/**
* 获取缓存
* @param $key string $name
* @return array,object,number,string,boolean
* @desc 使用了“锁机制”来防止防止缓存过期时所产生的惊群现象,保证只有一个进程拉取数据,可以更新,其他进程仍然获取过期数据
*/
public function getByLock($key)
{
$sth