缓存穿透、雪崩、击穿

缓存穿透

redis当中没有数据,数据库当中也没有数据,请求每次都是访问数据库,而数据库有没有数据返回。

缓存穿透解决方案

有很多种方法可以有效地解决缓存穿透问题。

  1. 最常见的则是采用布隆过滤器,它是一种数据结构,将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据会被 这个bitmap拦截掉,从而避免了对底层存储系统的查询压力。
  2. 另外也有一个更为简单粗暴的方法(我们采用的就是这种),如果一个查询返回的数据为空(不管是数 据不存在,还是系统故障),我们仍然把这个空结果进行缓存,但它的过期时间会很短,最长不超过五分钟。

缓存击穿

热点key的过期,从而导致大量访问热点key的请求访问数据库,从而导致数据库压力过大。

缓存击穿解决方案

  1. 互斥锁实现:只允许一个线程对redis缓存进行重建,其他线程处于等待状态,可以通过redis当中的setnx实现。缺点是串行化执行,效率低。优点是一致性高。
  2. 逻辑过期:给需要缓存的数据添加一个逻辑过期字段,通过对逻辑过期字段的判断,判断数据有无过期,如果过期则开启一个线程进行缓存重建,并且返回之前的数据。缺点是数据的一致性低,优点是相应速度快。

缓存雪崩

redis中大量key集中过期或者redis服务器宕机,从而导致大量请求从数据库获取数据,导致数据库服务器访问压力过大。

缓存雪崩解决方案

  1. 若是由于大量key过期所造成的,可以给key的ttl设置一个过期时间
  2. 若是因为redis服务器宕机所导致的,可以搭建redis集群,保证高可用
  3. 可以从请求量层面进行解决,对缓存业务添加限流和服务降级策略
  4. 可以添加多级缓存,比如说nginx缓存
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇