缓存
缓存击穿,缓存穿透,缓存雪崩
1,缓存穿透:越过缓存,直接读数据库
使用错误的id,导致缓存找不到数据而直接找数据库
2,缓存击穿:某条数据在过期的时候,大量访问
解决方案:加互斥锁 redis setnx SET if Not eXists 成功返回1 失败返回0
function get($key)
{
$redis = new \Redis();
$redis->pconnect('localhost', 6379);
$redis->auth("123456");
$value = $redis->get($key);
if ($value) {
return $value;
} else {
//没有缓存
//先添加互斥锁
if ($redis->setnx('key_mutex', 1)) {
//加互踩锁成功
//重新将缓存进入数据
$data = [];
$redis->set($key,$data,3600);
$redis->del('key_mutex'); //数据录完之后,删除互斥锁
return $data;
} else {
//有锁的情况下,50毫秒之后,重新获取数据
sleep(50);
get($key);
}
}
}
3,缓存雪崩:各种数据使用相同的过期时间(后台一起加入缓存),过期的时候,这些数据全部读数据库
解决方案:不要把数据同时加入缓存,或者不要把数据的缓存时间调成不一致
redis基本数据类型;
浙公网安备 33010602011771号