缓存穿透:查询一个不存在的数据,Mysql查询不到也没有写入缓存,导致每次请求都会查询数据库。(比如恶意请求)

解决方案:

  1. 缓存空数据:返回数据为空时仍然缓存(但是需要加过期时间)。

优点:简单
缺点:消耗内存,可能存在数据不一致情况。

  1. 布隆过滤器

布隆过滤器使用Bitmap(位图)来记载一个数据是否在一个集合中,一般使用多个hash函数对数据ID进行hash计算,然后将计算结果保存在位图中,该ID的数据存在时,hash计算得到的位即为1。

项目启动后在redis预热时,同样需要预热布隆过滤器。

优点:内存占用少,没有多余的Key
缺点:实现复杂,存在误判情况(即数据库没有,但是布隆过滤器判断有)

标签: Redis, 知识点

添加新评论