打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
编程语言卧槽!缓存的问题太多了(雪崩、击穿、穿透…)一个个解决!

作者:温安适

来源:https://my.oschina.net/floor/blog/4964676

引言

一个超级疲惫的下午,离下班还有30分钟,小航拿了一袋坚果,对我说:”温哥,来来来,吃个坚果,开心下”

有了前几次的,经验,我意识到,这兄弟又要问题问题,委婉的回绝到:”谢谢好意,你吃吧,我不饿”。

小航,一看我有所防备,有拿出了安慕希,并且抓住了我的手臂,说道:“大神,我有困惑,请您帮帮我”

看他如此诚恳,我不好意思的说道:“大神不敢当,水平有限,恐无法为你解惑”。

小航一看有戏,有给了我一袋坚果,眼中有光的说道:“哥,您指点一二,无论对错,我都愿意听”

我感动(dong xi hao chi)的说:“什么问题,我试试看”

小航立刻说道:“使用缓存都有什么问题”

我缓缓道来:“主要四个问题,击穿,穿透,雪崩,污染”

问题描述

逐个解决

缓存击穿

热点key过期了,请求打到了数据库

解决方式

不给热点key设置过期时间

缓存穿透

缓存没有,数据库也没有。

解决方式

  1. 缓存空值或缓存缺省值

  2. 对入参进行校验,屏蔽无效参数请求

  3. 在redis前置布隆过滤器,快速判断

缓存雪崩

大量key同时失效

给key的过期时间加上随机数,避免同时过期

Redis挂了

  1. Redis,搭建主从集群(提高redis可靠性)

  2. 服务限流(限制访问量,减少redis压力)

  3. 服务熔断(直接返回错误,不在继续往下请求)

  4. 服务降级(redis替代方式,或者直接走库)

缓存污染

有不常用的key占用redis内存。

解决方式:

  1. 如果知道是那个key,直接删除

  2. Redis空间充足,可以考虑不解决

  3. 设置redis过期策略为allkey-lfu

注意是lfu,把访问次数最低的数据淘汰出缓存

Lru,解决不了如下场景:大量数据进行一次全体读取,因为这些被查询的数据刚刚被访问过,所以 lru 字段值都很大,无法淘汰不常用的key

总结



本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
【缓存】缓存中常见的4种问题分析以及解决方案
面试官:谈谈关于缓存穿透,缓存击穿,缓存雪崩,热点数据失效问题的解决方案
烂大街的缓存穿透、缓存击穿和缓存雪崩,你真的懂了?
Redis系列(六)Redis 的缓存穿透、缓存击穿和缓存雪崩
实例解读什么是Redis缓存穿透、缓存雪崩和缓存击穿
缓存穿透、缓存击穿和缓存雪崩
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服