黑马点评项目-7.缓存穿透

缓存穿透

缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远不会生效,这些请求全部会达到数据库。如果有黑客想要攻击服务器,则通过构造大量这种不存在的数据请求,使得服务器的数据库发生宕机。

解决方案

  1. 缓存空对象:当数据库查询不到数据时,缓存为查询的key保存一个null值的value。则下一次查询该key将不会抵达数据库。
    • 优点:实现简单,维护方便。
    • 缺点:
      额外的内存消耗:可能需要为大量的key缓存null值。
      短期的不一致:第一次查询发现没有,缓存null值后,新插入(新插入而不是更新,不发生删除缓存操作)该条不存在数据,此时缓存中为null,数据库中有值。可以通过设置TTL来缓解该问题。
      在这里插入图片描述
  2. 布隆过滤器:客户端的请求并不直接抵达缓存,而是先抵达布隆过滤器,如果过滤器判定不存在,则直接返回拒绝。如果存在就正常进行查询。
    • 怎么自动判断的存不存在?一个Byte数组,里面存储二进制位。通过将数据库中的所有数据基于某种hash算法计算出hash值,将hash值转为二进制保存。
    • 100%准确吗?不一定,布隆过滤器是一种概率性的检验。但是也能极大减轻数据库的压力。
    • 优点:内存占用少,不用缓存null值。
    • 存在误判的可能。

解决缓存穿透的实现流程

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值