Redis缓存相关问题

Redis缓存相关问题

1 缓存穿透

  缓存穿透是指查询一个数据库一定不存在的数据.
正常使用Redis缓存的流程大致是:

  1. 数据查询首先进行缓存查询
  2. 如果数据存在则直接返回缓存数据
  3. 如果数据不存在,就对数据库进行查询,并把查询到的数据放进缓存
  4. 如果数据库查询数据为空,则不放进缓存

  如果有人恶意查询数据库中不存在的数据,就会对数据库造成压力,甚至压垮数据库,解决该问题的方法为:

  如果从数据库中查询的对象为空,也放入缓存,将用户提交的主键值其value设为null,并且将缓存过期时间设为60秒,即使恶意攻击也是从缓存中查询为null,不会频繁查询数据库.

2 缓存雪崩

  缓存雪崩,是指在某一个时间段,缓存集中过期失效.在缓存集中失效的这个时间段对数据的访问查询,都落到了数据库上,对于数据库而言,就会产生周期性的压力波峰.

  为了避免雪崩的发生,可以将缓存的数据设置不同的失效时间.将访问频率高的数据缓存时间设置长一些,冷门的时间短一些.

3 缓存击穿

  缓存击穿,是指一个 key 非常热点,不停的被集中的进行访问,当这个数据在key失效的瞬间,持续的并发访问就会击破缓存,直接请求到数据库上.
  将热点数据设置永不过期就可以解决缓存击穿的问题了.

你可能感兴趣的:(Redis)