作者:温恬适
起源:https://my.oschina.net/floor/…
引言
一个超级疲乏的下午,离上班还有 30 分钟,小航拿了一袋坚果,对我说:”温哥,来来来,吃个坚果,开心下”
有了前几次的,教训,我意识到,这兄弟又要问题问题,婉转的拒绝到:”谢谢好心,你吃吧,我不饿”。
小航,一看我有所防范,有拿出了安慕希,并且抓住了我的手臂,说道:“大神,我有困惑,请您帮帮我”
看他如此恳切,我不好意思的说道:“大神不敢当,程度无限,恐无奈为你解惑”。
小航一看有戏,有给了我一袋坚果, 眼中有光的说道:“哥,您指导一二,无论对错,我都违心听”
我打动(dong xi hao chi)的说:“什么问题,我试试看”
小航立即说道:“应用缓存都有什么问题”
我缓缓道来:“次要四个问题,击穿,穿透,雪崩,净化”
问题形容
一一解决
缓存击穿
热点 key 过期了,申请打到了数据库
解决形式
不给热点 key 设置过期工夫
缓存穿透
缓存没有,数据库也没有。
解决形式
- 缓存空值或缓存缺省值
- 对入参进行校验,屏蔽有效参数申请
- 在 redis 前置布隆过滤器,疾速判断
缓存雪崩
大量 key 同时生效
给 key 的过期工夫加上随机数,防止同时过期
Redis 挂了
- Redis,搭建主从集群(进步 redis 可靠性)
- 服务限流(限度访问量,缩小 redis 压力)
- 服务熔断(间接返回谬误,不在持续往下申请)
- 服务降级(redis 代替形式,或者间接走库)
缓存净化
有不罕用的 key 占用 redis 内存。
解决形式:
- 如果晓得是那个 key,间接删除
- Redis 空间短缺,能够思考不解决
- 设置 redis 过期策略为 allkey-lfu
留神是 lfu,把拜访次数最低的数据淘汰出缓存
Lru,解决不了如下场景:大量数据进行一次整体读取,因为这些被查问的数据刚刚被拜访过,所以 lru 字段值都很大,无奈淘汰不罕用的 key
总结
近期热文举荐:
1.1,000+ 道 Java 面试题及答案整顿 (2021 最新版)
2. 别在再满屏的 if/ else 了,试试策略模式,真香!!
3. 卧槽!Java 中的 xx ≠ null 是什么新语法?
4.Spring Boot 2.5 重磅公布,光明模式太炸了!
5.《Java 开发手册(嵩山版)》最新公布,速速下载!
感觉不错,别忘了顺手点赞 + 转发哦!