缓存中在我们的项目中一直都是非常重要的作用,可以提高我们整个项目的性能,说到缓存我们会想到Redis,但是使用Redis会存在很多的问题,缓存的三大问题缓存穿透,缓存击穿,缓存雪崩,我们来看一下如果解决这三大问题
为什么使用缓存
减轻数据库访问压力
使用缓存可以保护数据库,如果没有使用缓存它是直接查询数据库的,使用缓存后,第一次查询数据库,大部分请求不需要查询数据库直接查询缓存,这就降低了数据库的访问压力
提高性能
缓存是比数据库查询速度要高的
我们在项目中使用缓存最基本的思路:
- 查询缓存,如果缓存有数据,则返回缓存数据
- 如果缓存没数据,则查询数据库,如果数据库没数据,则返回null
缓存穿透
缓存中没有数据,数据库中也没有数据,查询一条根本不存在数据
解决方案
互联网最流行的两个解决方案
- 缓存空对象
- 布隆过滤器
缓存空对象
先查询缓存,如果不为空,在判断里面再加一个判断,如果是空对象则返回查询无果,如果缓存不为空,则返回数据
查询数据库,如果不为空则添加到缓存,反之则添加到缓存空对象
缺点:缓存空对象会占用redis的大量内存,redis有个过期时间,过期后还是会查询数据库,治标不治本