移动宽带 国外网站,可以自己设计房子的软件,网站** 教程,二手网站建设的策划如何理解Redis缓存的穿透、击穿、雪崩问题#xff1a;
缓存穿透
是指缓存中和数据库中都没有数据#xff0c;而用户不断访问#xff0c;导致这个不存在的数据每次请求都要到存储层去查询#xff0c;这样失去了意义。
缓存穿透的解决方案有哪些?
缓存null值布隆过滤增强…如何理解Redis缓存的穿透、击穿、雪崩问题
缓存穿透
是指缓存中和数据库中都没有数据而用户不断访问导致这个不存在的数据每次请求都要到存储层去查询这样失去了意义。
缓存穿透的解决方案有哪些?
缓存null值布隆过滤增强id的复杂度避免被猜测id规律做好数据的基础格式校验加强用户权限校验做好热点参数的限流
讲一讲布隆过滤
布隆过滤器的特点 容器角度
如果布隆过滤器判断结果为元素存在那么该元素实际上元素不一定会存在由于哈希碰撞所以会存在一定误判率。如果布隆过滤器判断结果为元素不存在那么他就一定不存在因为无论哈希碰撞啥的只要该元素计算出下标值对应数组元素值为0那么该元素就必定不存在。布隆过滤器是不支持删除元素的因为如果位图的某个位被多个元素占用着那么如果删除其中一个元素是否能将该位置0能置0的话会影响到其他元素不置0就等于没删除。
元素角度
如果元素实际不存在布隆过滤器可能判断存在。如果元素实际存在布隆过滤器一定判断存在。
利用第二个特性我们就能解决持续从数据库查询不存在的值的问题把要查询的值先过布隆过滤器判断是否存在存在就走redis缓存不存在就直接返回并且配合缓存空值可以有效解决缓存穿透问题虽然存在一定误差但是在业务范围内允许接受。 第一步先查询数据库数据并加入到布隆过滤器中。请求发送过来布隆过滤器判断是否命中命中就走缓存之后接着看是否走数据库还是直接从缓存获取返回。如果布隆过滤器miss就直接返回不走cache了。
缓存击穿
是缓存中没有数据而数据库中有数据一般是缓存时间到期这时由于并发用户特别多同时读缓存没读到数据又同时去数据库去取数据引起数据库压力瞬间增大。
解决方案优点缺点互斥锁 没有额外的内存消耗保证一致性实现简单 线程需要等待性能受影响可能有死锁风险逻辑过期 线程无需等待。性能较好 不保证一致性有额外内存消耗实现复杂
缓存雪崩
就是同一时间内大量的缓存key值同时失效或者redis服务器宕机导致大量的请求到达数据库带来巨大的压力 解决方案
1. 合理设置缓存过期时间
避免大量缓存数据同时过期可以设置缓存的过期时间为随机值或者在缓存集中到期之前提前对热点数据进行预热将热点数据提前加载到缓存中。
2. 使用多级缓存
将缓存数据分散到不同的缓存节点或缓存服务器中以减少缓存集中到期的风险。可以结合本地缓存、分布式缓存等方式来实现多级缓存。
3. 限流和熔断
对请求进行限流处理避免大量请求同时涌入数据库。可以使用限流算法如令牌桶、漏桶算法对请求进行限制。同时可以设置熔断机制在检测到系统异常时暂时屏蔽部分请求以保护数据库免受过载。
4. 数据库优化
提高数据库的处理能力和稳定性可以采用数据库集群、读写分离、垂直拆分等方式来优化数据库架构提高数据库的负载能力。