19

Redis缓存中【缓存穿透、缓存击穿、缓存雪崩】解决方案

 4 years ago
source link: https://segmentfault.com/a/1190000038461071
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

1.前言

当我们设计一个Redis缓存服务时,缓存穿透、缓存击穿、缓存雪崩这三大问题我们不得不考虑。同时参见面试时面试官也会常问这三大问题。本章我们来分析一下这三大问题。

2.缓存穿透

2.1什么叫缓存穿透?

  • 正常情况下,查询数据无论在缓存中或者数据库中,都应该有这样的数据。但如果这个数据在缓存和数据库都 不存在 ,那么用户高并发环境下访问 数据库缓存 中都 不存在的数据 称之为缓存穿透现象.
  • UfUBj2n.png!mobile

2.2穿透带来的问题

  • 如果有些不怀好意的人,利用这个不存在的数据,频繁大量的访问你的数据库,产生大量的请求,极有可能导致你的数据库异常访问不了、数据库宕掉。

2.3解决方案

1). 禁用IP 限制IP访问.

2). 限流 每秒最多访问3次

3). 布隆过滤器 (常见解决方案)

4). 缓存空值 (简单粗暴)

  • 布隆过滤器

    • 布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个 很长的二进制向量和一系列随机映射函数 。布隆过滤器可以 用于检索一个元素是否在一个集合中 。它的优点是空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别率和删除困难。
    • 原理
    • uMV7Zrj.png!mobile
    • 缺点:
    • 由于 hash碰撞问题 ,可能由多个key有相同的位置,所以得出结论,布隆过滤器认为数据存在,那么数据可能存在.如果布隆过滤器认为数据不存在,则数据一定不在.
    • 解决方案
    • 1.扩容二进制向量位数.
    • 2.增加hash函数的个数
    • 当位数增加/函数适当增加,则可以有效的降低hash碰撞的几率. 默认值 0.03

v2QNNzU.png!mobile

  • 缓存空值

    • 这个方案简单粗暴,就是拿到这些不存在数据key,并把value设置成null放到缓存中去,后面再请求这样的数据直接到缓存查询,返回给它null就可以了,切记也要给这些不存在数据的key设置失效时间。

3.缓存击穿

3.1什么叫缓存击穿?

  • 在高并发的环境下,大量请求同时请求同一个key,如果恰巧这个时候key失效了。那么当某个热点数据在缓存中 突然失效 .导致大量的用户直接访问数据库.导致并发压力过高造成异常这个现象被称为 缓存击穿

3.2击穿带来的问题

  • 造成某个时刻所有访问直接打在数据库上,导致数据库压力剧增

3.3解决方案

1.尽可能将热点数据的超时时间 设定的长一点

2.设定多级缓存 超时时间采用随机算法.

4.缓存雪崩

4.1什么叫缓存雪崩?

  • 在缓存服务器中,由于大量的缓存数据失效,导致用户访问的命中率过低.导致直接访问数据库.例如缓存服务宕机,然后大量请求直接访问数据库,极有导致数据库也宕机.

4.2雪崩带来的问题

导致缓存、数据库等一系列服务宕机..

4.3解决方案

  1. 使用集群缓存,保证缓存服务的高可用
  2. 设定超时时间时,应该采用随机算法

Recommend

  • 31
    • 微信 mp.weixin.qq.com 5 years ago
    • Cache

    缓存击穿/穿透/雪崩

    缓存击穿/穿透/雪崩 Intro 使用缓存需要了解几个缓存问题,缓存击穿、缓存穿透以及缓存雪崩,需要了解它们产生的原因以及怎么避免,尤其是当你打算设计自己的缓存框架的时候需要考虑如何处理这些问题。 ...

  • 20

    点击上方 “ 匠心零度 ” ,选择“

  • 8

    缓存穿透,击穿,雪崩以及解决方案,干货满满发布于 5 月 14 日缓存的设计包含很多技巧,设计不当将会导致严重的后果。redis作为一种非关系型数据库,也总是免不了...

  • 9

    Redis 缓存击穿(失效)、缓存穿透、缓存雪崩怎么解决?原始数据存储在 DB 中(如 MySQL、Hbase 等),但 DB 的读写性能低、延迟高。比如 MySQL 在 4 核 8G 上的 TPS = 5000,QPS =...

  • 5

    大家好,我是七淅(xī)。 作为后端开发,我想缓存是大家再熟悉不过的东西了。 本文会介绍出现缓存雪崩、穿透和击穿的业务背景、解决方案和对业务可靠性处理。事先说明,最佳解决方案一定需要结合实际业务调整,不同业务的处理...

  • 4

    缓存击穿、穿透、雪崩专项测试 作者:京东科技刘须华 2022-11-18 14:34:28 R2M缓存的使用,极大的提升了应用程序的性能和效率,特别是数据查询方面。而缓存最常见的问题是缓存穿透、击穿和雪崩,在高并发下这三种...

  • 6

    【专项测试系列】-缓存击穿、穿透、雪崩专项测试 推荐 原创 京东云官方 2022-11-1...

  • 6

    场景问题及原因 缓存穿透: 原因:客户端请求的数据在缓存和数据库中不存在,这样缓存永远不会生效,请求全部打入数据库,造成数据库连接异常。 解决思路: 缓存空对...

  • 10

    缓存击穿、穿透、雪崩及解决方案 Redis是一种高性能的键值型数据库,它可以用来实现缓存功能,提高应用的响应速度和承载能力。但是,使用Redis缓存也会遇到一些常见的问题,比如缓存击穿、缓存穿透、缓存雪崩。这些问题都...

  • 9

    1. 什么是缓存雪崩 当我们提到缓存系统中的问题,缓存雪崩是一个经常被讨论的话题。缓存雪崩是指在某一时刻发生大量的缓存失效,导致瞬间大量的请求直接打到了数据库,可能会导致数据库瞬间压力过大甚至宕机。尤其在高并发的系统中,...

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK