Redis缓存穿透、缓存击穿、缓存雪崩与解决方案

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: Redis缓存穿透、缓存击穿、缓存雪崩与解决方案

Redis缓存命中示意图

image.png

缓存穿透

缓存穿透指的是在业务中,某些数据会频繁被访问,例如秒杀活动中的商品信息等,这些数据被称为热点数据。如果缓存中的某个热点数据过期了,并且在此期间大量的请求访问了该热点数据,那么缓存无法命中,请求就会直接访问数据库。由于数据库处理高并发请求的能力有限,这种情况容易导致数据库崩溃,从而出现缓存击穿的问题。为了解决这个问题,我们需要进行相应的优化措施。

解决方法1:

为了解决缓存击穿的问题,可以采用互斥锁方案。该方案保证同一时间只有一个业务线程可以更新缓存,其他线程若未获取到锁,则可以选择等待锁释放后重新读取缓存,或者返回空值或默认值。这样可以有效避免大量请求同时访问数据库,提高系统的性能和稳定性。

解决方法2:

为了解决缓存击穿的问题,可以采用不给热点数据设置过期时间的方案,并由后台线程异步更新缓存。当热点数据准备要过期时,可以提前通知后台线程更新缓存并重新设置过期时间,以确保缓存的及时更新。这种方案可以避免热点数据过期后引起大量请求直接访问数据库的情况,从而提高系统的性能和稳定性。

缓存穿透

缓存穿透指的是用户访问某个热点资源时,没有命中redis缓存,于是到数据库获取数据,数据库也查询不到数据(例如查询id为0或负数等不存在的数据),所以这个请求的数据不会被放到缓存中,后续用户一直请求这个数据,请求一直连接数据库查询,造成数据库压力过大。

解决方法1:

无论在数据库有没有查到数据,都在redis缓存一份,比如当热点数据查询不到时,将空值也放入redis。

解决方法2:

使用布隆过滤器,过滤参数不符合规则的请求。

缓存雪崩

当缓存中一批热点数据过期时,此时大量用户访问热点数据,因为缓存已经过期,所以请求将直接通过数据库查询,造成数据库压力过大。

解决方法1:

保证热点数据不会过期,每次访问热点数据时刷新或累加热点数据的有效时间。

解决方法2:

手动将即将缓存起来的热点数据缓存进redis。

相关文章
|
2月前
|
缓存 数据库连接 数据库
缓存三剑客(穿透、击穿、雪崩)
缓存穿透指查询数据库和缓存中都不存在的数据,导致请求直接冲击数据库。解决方案包括缓存空对象和布隆过滤器。缓存击穿是大量请求访问同一个失效的热点数据,使数据库瞬间压力剧增,解决方法有提前预热、设置永不过期、加锁限流等。缓存雪崩是大量key同时失效,导致所有请求直达数据库,可通过引入随机过期时间缓解。三者分别对应单点爆破、全面崩塌等问题,需根据场景选择合适策略优化系统性能与稳定性。
206 0
|
2月前
|
存储 缓存 NoSQL
如何解决缓存击穿?
缓存击穿是指热点数据失效时大量请求直接冲击数据库,可能导致系统崩溃。解决方案包括:永不过期策略避免缓存失效瞬间的穿透;互斥锁控制并发访问;热点预热提前刷新缓存;熔断降级在数据库压力大时返回默认值;二级缓存降低Redis压力。实际中常组合使用多种方案,如热点预热+互斥锁+熔断降级,以提升系统稳定性与性能。
311 0
|
10天前
|
存储 缓存 NoSQL
Redis专题-实战篇二-商户查询缓存
本文介绍了缓存的基本概念、应用场景及实现方式,涵盖Redis缓存设计、缓存更新策略、缓存穿透问题及其解决方案。重点讲解了缓存空对象与布隆过滤器的使用,并通过代码示例演示了商铺查询的缓存优化实践。
75 1
Redis专题-实战篇二-商户查询缓存
|
11天前
|
缓存 NoSQL 关系型数据库
Redis缓存和分布式锁
Redis 是一种高性能的键值存储系统,广泛用于缓存、消息队列和内存数据库。其典型应用包括缓解关系型数据库压力,通过缓存热点数据提高查询效率,支持高并发访问。此外,Redis 还可用于实现分布式锁,解决分布式系统中的资源竞争问题。文章还探讨了缓存的更新策略、缓存穿透与雪崩的解决方案,以及 Redlock 算法等关键技术。
|
1月前
|
缓存 监控 安全
告别缓存击穿!Go 语言中的防并发神器:singleflight 包深度解析
在高并发场景中,多个请求同时访问同一资源易导致缓存击穿、数据库压力过大。Go 语言提供的 `singleflight` 包可将相同 key 的请求合并,仅执行一次实际操作,其余请求共享结果,有效降低系统负载。本文详解其原理、实现及典型应用场景,并附示例代码,助你掌握高并发优化技巧。
196 0
|
2月前
|
缓存 NoSQL 数据库
什么是缓存击穿
缓存击穿是指热点缓存key突然失效,导致大量并发请求直接冲击数据库,造成巨大压力。常见于高并发场景,如热门商品信息失效时。解决方法包括设置热点key永不过期、使用分布式锁、预热数据、熔断降级等,以保障系统稳定性。
465 0
|
4月前
|
缓存 NoSQL 关系型数据库
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
|
4月前
|
缓存 NoSQL Java
Redis+Caffeine构建高性能二级缓存
大家好,我是摘星。今天为大家带来的是Redis+Caffeine构建高性能二级缓存,废话不多说直接开始~
710 0
|
4月前
|
消息中间件 缓存 NoSQL
基于Spring Data Redis与RabbitMQ实现字符串缓存和计数功能(数据同步)
总的来说,借助Spring Data Redis和RabbitMQ,我们可以轻松实现字符串缓存和计数的功能。而关键的部分不过是一些"厨房的套路",一旦你掌握了这些套路,那么你就像厨师一样可以准备出一道道饕餮美食了。通过这种方式促进数据处理效率无疑将大大提高我们的生产力。
185 32
|
4月前
|
缓存 NoSQL Java
Redis:现代服务端开发的缓存基石与电商实践-优雅草卓伊凡
Redis:现代服务端开发的缓存基石与电商实践-优雅草卓伊凡
103 5
Redis:现代服务端开发的缓存基石与电商实践-优雅草卓伊凡