缓存穿透:
查询的数据,Redis中没有,数据库中也没有
- 根据id查询时,如果id是自增的,将id的最大值放到Redis中,在查询数据库之前,直接比较一下id。
- 如果id不是整型,可以将全部的id放到set中,在用户查询之前,去set中查看是否有一个id.
- 获取客户端的ip地址,可以将ip的访问添加限制
缓存击穿:
缓存中的热点数据,突然到期了,造成大量的请求都去访问数据库,造成数据库宕机
- 在访问缓存中没有的时候,直接添加一个锁,让几个请求都去访问数据库,避免数据库宕机。
- 热点数据的生存时间去掉
缓存雪崩
当大量缓存同时到期时,最终大量的请求同时去访问数据库,导致数据库宕机。
解决:将缓存中数据的生存时间,设置为30~60的一个随机时间
缓存倾斜
热点数据放在了一个Redis节点,导致Redis节点无法承受住大量的请求,最终Redis宕机
- 扩展主从架构,搭建大量的从节点,缓解Redis的压力
- 可以在Tomcat中做JVM缓存,在查询Redis之前,先去查询Tomcat中的缓存。