关于java:卧槽缓存的问题太多了雪崩击穿穿透…一个个解决

41次阅读

共计 916 个字符,预计需要花费 3 分钟才能阅读完成。

作者:温恬适

起源:https://my.oschina.net/floor/…

引言

一个超级疲乏的下午,离上班还有 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

总结

近期热文举荐:

1.1,000+ 道 Java 面试题及答案整顿 (2021 最新版)

2. 别在再满屏的 if/ else 了,试试策略模式,真香!!

3. 卧槽!Java 中的 xx ≠ null 是什么新语法?

4.Spring Boot 2.5 重磅公布,光明模式太炸了!

5.《Java 开发手册(嵩山版)》最新公布,速速下载!

感觉不错,别忘了顺手点赞 + 转发哦!

正文完
 0