ITPub博客

首页 > 数据库 > 数据库开发技术 > 缓存击穿、穿透、雪崩

缓存击穿、穿透、雪崩

原创 数据库开发技术 作者:后端Q 时间:2024-08-03 00:00:00 0 删除 编辑

在现代互联网应用中,缓存技术是提高系统性能和用户体验的关键。然而,缓存并非万能的,它也可能带来一系列问题,其中最常见的包括缓存击穿、缓存穿透和缓存雪崩。本文将深入探讨这三种现象,并提供相应的应对策略。

一、缓存击穿

定义

缓存击穿是指缓存中没有但数据库中有的数据(一般是缓存时间到期),此时由于并发用户特别多,同时读缓存没读到数据,又同时去数据库去取数据,引起数据库压力瞬间增大,造成过大压力。

应对策略

  1. 设置热点数据永不过期:对于某些热点数据,可以设置其缓存永不过期,从而避免缓存击穿的问题。
  2. 加锁:在访问数据库之前,先加锁,保证同一时间只有一个请求去数据库查询数据,并将结果更新到缓存中。其他请求则等待缓存更新后直接访问缓存。

二、缓存穿透

定义

缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求,如发起为id为“-1”的数据或id为特别大不存在的数据。这时的用户很可能是攻击者,攻击会导致数据库压力过大。

应对策略

  1. 接口层增加校验:如用户鉴权校验,id做基础校验,id<=0的直接拦截。
  2. **从缓存取不到的数据,在数据库中也没有取到,这时也可以将key-value对写为key-null,缓存有效时间可以设置短点,如30秒(设置太长会导致正常情况也没法使用)。这样可以防止攻击用户反复用同一个id暴力攻击。
  3. 采用布隆过滤器:将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据会被这个bitmap拦截掉,从而避免了对底层存储系统的查询压力。

三、缓存雪崩

定义

缓存雪崩是指缓存中数据大批量到过期时间,而查询数据量巨大,引起数据库压力过大甚至down机。和缓存击穿不同的是,缓存击穿指并发查同一条数据,缓存雪崩是不同数据都过期了,很多数据都查不到从而查数据库。

应对策略

  1. 缓存数据的过期时间设置随机:防止同一时间大量数据过期现象发生。
  2. 如果缓存数据库是分布式部署,将热点数据均匀分布在不同缓存数据库中。
  3. 设置热点数据永不过期:对于某些热点数据,可以设置其缓存永不过期,从而避免缓存雪崩的问题(与缓存击穿应对策略相同)。

结论

缓存击穿、穿透和雪崩是缓存技术中常见的三种问题,它们都可能对系统的性能和稳定性造成严重影响。通过合理的应对策略,我们可以有效地缓解这些问题带来的风险。在实际应用中,我们需要根据具体的业务场景和需求来选择合适的应对策略,并不断优化和调整缓存策略以适应业务的发展变化。


原文作者:后端Q;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2023-01-22

  • 博文量
    1540
  • 访问量
    727700