• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
CaoJianbang
邦哥
博客园    首页    新随笔    联系   管理    订阅  订阅

缓存

缓存击穿,缓存穿透,缓存雪崩

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基本数据类型;

posted @ 2021-05-08 10:19  CaoJianbang  阅读(115)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3