什么是缓存穿透?即当求情在缓存中没有找到对应的结果,直接去数据库中查询。少量的这种操作不会产生什么影响,但当大量的高并发的恶意请求,会对数据库造成非常大的影响。针对这种情况我们需要如何解决呢?
解决方案:
- 对恶意的请求做出过滤,尽可能的屏蔽不存在的key
- 用布隆过滤器(用多个hash函数对一个请求作用生成多个哈希值,把每个哈希值指向的bit位置的值设置未1或者+1,如果当一个请求对应的几个哈希值的bit位的值都是0的话,这个值就不存在)对不存在的请求做出过滤
- 对内存中不存在的值,通过加双重检测同步锁控制对数据库的访问数(这个是重要的用法)