什么是缓存穿透,如何解决

场景:
对于系统A,假设一秒 5000 个请求,结果其中 4000 个请求是黑客发出的恶意攻击。

黑客发出的那 4000 个攻击,缓存中查不到,每次你去数据库里查,也查不到。

举个例子
数据库 id 是从 1 开始的,结果黑客发过来的请求 id 全部都是负数。这样的话,缓存中不会有,请求每次都会直接越过缓存,直接查询数据库。这种恶意攻击场景的缓存穿透就会直接把数据库给打死。

大概就是这个样子:
什么是缓存穿透,如何解决

解决办法:
每次系统 A 从数据库中只要没查到,就写一个空值到缓存里去,比如 set -999 UNKNOWN。这样的话,下次便能走缓存了