Redis的缓存问题

180 阅读1分钟

缓存穿透:

查询的数据,Redis中没有,数据库中也没有

  1. 根据id查询时,如果id是自增的,将id的最大值放到Redis中,在查询数据库之前,直接比较一下id。
  2. 如果id不是整型,可以将全部的id放到set中,在用户查询之前,去set中查看是否有一个id.
  3. 获取客户端的ip地址,可以将ip的访问添加限制

image.png

缓存击穿:

缓存中的热点数据,突然到期了,造成大量的请求都去访问数据库,造成数据库宕机

  1. 在访问缓存中没有的时候,直接添加一个锁,让几个请求都去访问数据库,避免数据库宕机。
  2. 热点数据的生存时间去掉

image.png

缓存雪崩

当大量缓存同时到期时,最终大量的请求同时去访问数据库,导致数据库宕机。
解决:将缓存中数据的生存时间,设置为30~60的一个随机时间

image.png

缓存倾斜

热点数据放在了一个Redis节点,导致Redis节点无法承受住大量的请求,最终Redis宕机

  1. 扩展主从架构,搭建大量的从节点,缓解Redis的压力
  2. 可以在Tomcat中做JVM缓存,在查询Redis之前,先去查询Tomcat中的缓存。

image.png