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

207 阅读1分钟

缓存中在我们的项目中一直都是非常重要的作用,可以提高我们整个项目的性能,说到缓存我们会想到Redis,但是使用Redis会存在很多的问题,缓存的三大问题缓存穿透,缓存击穿,缓存雪崩,我们来看一下如果解决这三大问题

为什么使用缓存

减轻数据库访问压力

使用缓存可以保护数据库,如果没有使用缓存它是直接查询数据库的,使用缓存后,第一次查询数据库,大部分请求不需要查询数据库直接查询缓存,这就降低了数据库的访问压力

提高性能

缓存是比数据库查询速度要高的

我们在项目中使用缓存最基本的思路:

  • 查询缓存,如果缓存有数据,则返回缓存数据
  • 如果缓存没数据,则查询数据库,如果数据库没数据,则返回null


 缓存穿透

缓存中没有数据,数据库中也没有数据,查询一条根本不存在数据

解决方案

互联网最流行的两个解决方案

  • 缓存空对象
  • 布隆过滤器

缓存空对象

先查询缓存,如果不为空,在判断里面再加一个判断,如果是空对象则返回查询无果,如果缓存不为空,则返回数据

查询数据库,如果不为空则添加到缓存,反之则添加到缓存空对象

缺点:缓存空对象会占用redis的大量内存,redis有个过期时间,过期后还是会查询数据库,治标不治本