【知识点】Redis-缓存-缓存穿透
缓存穿透:查询一个不存在的数据,Mysql查询不到也没有写入缓存,导致每次请求都会查询数据库。(比如恶意请求)
解决方案:
- 缓存空数据:返回数据为空时仍然缓存(但是需要加过期时间)。
优点:简单
缺点:消耗内存,可能存在数据不一致情况。
- 布隆过滤器
布隆过滤器使用Bitmap(位图)来记载一个数据是否在一个集合中,一般使用多个hash函数对数据ID进行hash计算,然后将计算结果保存在位图中,该ID的数据存在时,hash计算得到的位即为1。
项目启动后在redis预热时,同样需要预热布隆过滤器。
优点:内存占用少,没有多余的Key
缺点:实现复杂,存在误判情况(即数据库没有,但是布隆过滤器判断有)