关于redis:redis进阶5缓存雪崩击穿穿透

2次阅读

共计 674 个字符,预计需要花费 2 分钟才能阅读完成。

缓存雪崩 + 击穿 + 穿透

缓存雪崩

目前电商首页以及热点数据都会去做缓存,个别缓存都是定时工作去刷新,或者是查不到之后去更新的,定时工作刷新就有一个问题:缓存雪崩。

缓存雪崩是指在大 QPS 时,缓存刚好生效或更新,大量申请打到 DB 上,导致 DB 扛不住挂掉。

解决方案

  1. 错开 KEY 的生效工夫

setRedis(Key,value,time + Math.random() * 10000);

  1. 热点数据永不过期,放弃和数据库一致性更新

缓存穿透

指缓存和数据库中都没有的数据,但却产生了数据库的查问。比方数据库的 id 都是 1 开始自增下来的,如果发动为 id 值为 -1 的数据或 id 为特地大不存在的数据。

解决方案

  1. 接口层减少校验,比方用户鉴权校验,参数做校验,不非法的参数间接代码 Return,比方:id 做根底校验,id <= 0 的间接拦挡等。
  2. 从缓存取不到的数据,在数据库中也没有取到,这时也能够将对应 Key 的 Value 对写为 null、地位谬误、稍后重试这样的值具体取啥问产品,或者看具体的场景,缓存无效工夫能够设置短点,如 30 秒(设置太长会导致失常状况也没法应用)。
  3. 能够依据场景联合 uri 和申请参数做缓存。
  4. nginx 代理层限度同 IP 高频率拜访

缓存击穿

缓存击穿和缓存雪崩一样,不过前者是点,后者是面。缓存击穿是指一个 Key 十分热点,在不停的扛着大并发,大并发集中对这一个点进行拜访,当这个 Key 在生效的霎时,继续的大并发就穿破缓存,间接申请数据库,就像在一个完整无缺的桶上凿开了一个洞。

解决方案

  1. 热点数据永不过期,放弃和数据库一致性更新。
  2. 加上互斥锁。缓存更新时上锁,此时进来的申请能够先 sleep 梗塞起。

正文完
 0