用户注册-如何巧妙应对缓存穿透
背景
在如今微服务遍地的互联网项目来说,使用缓存,常见的比如Redis,是最常用的提高效率的手段,尤其是在读多,写少的情况下更为适用。能很大程度的降低数据库的压力,但引入缓存同样也造成了一系列的问题需要解决,常见的比如缓存雪崩、缓存穿透。本文要介绍的就是关于缓存穿透的解决方案
缓存穿透
定义
缓存穿透是指查询的数据在缓存和数据库中都不存在,导致每次查询这条数据都会穿透过缓存,直接去查询数据库,相当于没有缓存一样。
危害
一般存在缓存是为了缓解数据库的压力,如果短时间内发生了大量的请求并缓存穿透,就会试数据库的压力猛增,数据库的抗压能力比Redis要差的多得多,完全不是一个级别,所以如果是高并发的缓存穿透,极有可能造成系统宕机。
原因
- 业务代码或者数据出现了问题
- 恶意攻击、爬虫等造成大量缓存穿透请求
解决方案
缓存空对象
当查询的数据在缓存中和数据库中都不存在时,就缓存一个空结果,比如null,并将这个空结果返回给前端,并设置一个过期时间,避免消耗太多的内存
拿用户注册逻辑来说
- 用户1注册用户使用用户1自己的手机号,查询缓存和数据库都不存在,接着在缓存中设置一个空值,过期时间30s
- 用户2注册用户使用用户2自己的手机号,查询缓存和数据库都不存在,接着在缓存中设置一个空值,过期时间30s
问题
当短时间内大量用户来注册,每个用户都是用自己的手机号,缓存空值没有得到复用,除非手机号重复了,但这也不可能。所以还是穿透了缓存,请求都落到了数据库上,所以这种方案适合缓存空值能复用的场景。对于用户注册业务来说,不太适合
付费内容提示
该文档的全部内容仅对「JavaUp项目实战&技术讲解」知识星球用户开放
加入星球后,你可以获得:
- 超级八股文:100万+字的全栈技术知识库,涵盖技术核心、数据库、中间件、分布式等深度剖析的讲解
- 讲解文档:黑马点评Plus、大麦、大麦pro、大麦AI、流量切换、数据中台的从0到1的550+详细文档
- 讲解视频:黑马点评Plus、大麦、大麦pro、大麦AI、流量切换、数据中台的核心业务详细讲解
- 1 对 1 解答:可以对我进行1对1的问题提问,而不仅仅只限于项目
- 针对性服务:有没理解的地方,文档或者视频还没有讲到可以提出,本人会补充
- 面试与简历指导:提供面试回答技巧,项目怎样写才能在简历中具有独特的亮点
- 中间件环境:对于项目中需要使用的中间件,可直接替换成我提供的云环境
- 面试后复盘:小伙伴去面试后,如果哪里被面试官问住了,可以再找我解答
- 远程的解决:如果在启动项目遇到问题,本人可以帮你远程解决
进入星球后,即可享受上述所有服务,保证不会再有其他隐藏费用。
