菜鸡的redis之路(四)-常见缓存问题之缓存穿透

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cvntopuyef/article/details/84346454

常见的redis缓存问题

1.缓存穿透 -->频繁查询一个不存在的数据,由于缓存不命中,每次都要查询持久层,从而失去缓存的意义
2.缓存雪崩 -->缓存大量失效的时候,引发大量查询数据库
3.热点Key -->某个key访问非常频繁,当key失效的时候,有大量线程来构建缓存,导致负载增加,系统崩溃

缓存穿透

方案一:使用互斥锁排队(缺点:锁机制影响性能)
在这里插入图片描述
在这里插入图片描述

#######################获取锁############################
在这里插入图片描述

#######################释放锁############################

在这里插入图片描述
或者:
在这里插入图片描述

方案二:布隆过滤器(缺点:存在误判率,删除困难等)
在这里插入图片描述

在这里插入图片描述

实现布隆过滤器:
在这里插入图片描述

方案三:缓存空值

第一个商品数据请求,查询redis,返现没有缓存,然后查询数据库,也没有值,此时,将这个key缓存到redis,值为null,那么接下来相同key的请求就会查询redis,走不到数据库层…当商品数据更新的时候,顺便去更新缓存即可
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/cvntopuyef/article/details/84346454