当前位置:网站首页>7-Redis架构设计到使用场景-缓存穿透、缓存雪崩、缓存预热、缓存降级
7-Redis架构设计到使用场景-缓存穿透、缓存雪崩、缓存预热、缓存降级
2022-07-15 19:22:00 【xianghan收藏册】
常见问题

缓存穿透
一般访问缓存,如果缓存中存在查询的商品数据,那么直接返回;如果缓存中不存在商品数据,一般需要访问数据库获取数据。

由于不恰当的业务实现,或者外部恶意攻击不断请求非缓存数据,导致所有的请求都会在短时间访问到数据库,对数据库可能带来一定的压力,甚至引起崩溃。
**解决方案:**针对缓存穿透的情况,最简单的对策就是将不存在的数据访问结果,也存储到缓存中,避免缓存访问的穿透;并将不存在商品数据的访问结果也缓存下来,有效的避免缓存穿透的风险。
缓存雪崩
当缓存重启或者大量的缓存在某一时间段失效,会导致大批流量直接访问数据库,对DB造成压力,从而引起DB故障,引起系统崩溃。
举个栗子,对于抢购类的促销运营活动,活动期间将带来大量的商品信息、库存等相关信息的查询。为了避免商品数据库的压力,将商品数据放入缓存中存储。不巧的是,抢购活动期间,大量的热门商品缓存同时失效过期了,导致大量查询流量落到数据库之上,对于数据库来说造成很大的压力。
解决方案:
- 将商品根据品类热度分类,购买比较多的类目商品缓存周期长一些,购买相对冷门的类目商品,缓存周期短一些;
- 在设置商品具体的缓存生效时间的时候,加上一个随机的区间因子,比如说5-10分钟之间来随意选择失效时间;
- 提前预估DB能力,如果缓存挂掉,数据库仍可以在一定程度上抗住流量的压力。
缓存预热
缓存预热是指系统上线后,将相关的缓存数据直接加载到缓存系统。可以避免在用户请求时,先查询数据库,然后再将数据缓存的问题。用户直接查询事先被预热的缓存数据。

如果不进行预热,那么Redis初识状态数据为空,系统上线初期,对于高并发的流量,都会访问到数据库中,对数据库造成流量的压力。
解决方案:
- 数据量不大的时候,工程启动的时候进行加载缓存动作;
- 数据量大的时候,设置一个定时任务脚本,进行缓存的刷新;
- 数据量太大的时候,优先保证热点数据进行提前加载到缓存。
缓存降级
缓存降级是指缓存失效或者缓存服务挂掉的情况下,也不访问数据库,直接访问内存数据或者直接返回默认数据。
举个栗子,对于应用的首页,一般访问量会非常大,首页里面往往包含了部分推荐商品的展示信息,这些推荐商品都会放到缓存中进行存储,同时为了避免缓存的异常情况,对热点商品数据也存储到了内存中,同时内存中还保留了一些默认的商品信息。

边栏推荐
猜你喜欢

Hcip day 8 notes

edusoho企培版 外部资讯抓取 有时无法获取图片问题/无法获取微信公众号图片

【微服务】Nacos数据持久化以及集群的搭建

解析现代化创客教育的出发点

电商爬虫API全面详解

腾势全新豪华中大型MPV曝光,安全、舒适一个不落

ROS (25): release a static odometer Odom information

Health prevention guide 1: the secret of weight and weight loss

Accumulate class hour experience and practice of children's programming

云文档管理软件 DocuWare Cloud 如何解决 5 大 IT 难题
随机推荐
全局注册组件
什么是真正的HTAP?(一)背景篇
信息检索顶会SIGIR2022最佳论文奖出炉,墨尔本理工大学最佳论文,UMass大学等最佳短论文
Easy gene encode histone chip SEQ and transcription factor chip SEQ data standard and processing flow
[matlab project practice] digital signal processing system based on GUI
云文档管理软件 DocuWare Cloud 如何解决 5 大 IT 难题
助力品牌洞察——消费者情绪行为分析
Scenarios that must be considered when designing a stable microservice system
Hcip day 8 notes
Cartoon | blockbuster! The group of seven decided to sanction go language!
ROS (25): release a static odometer Odom information
如何部署PolarDB for PostgreSQL?
请教下MySQL Source并行度的问题,我的Source下游并行度为1,我发现不开并行的话,和下
认识百度AI开发平台
ROS (function package rename)
On QR in software automatic testing_ Login logic of code
[Unity]技巧分享:更改Unity Asset Store 默认下载资源位置的方法
SQL也能玩转AI ?没错!MLOps Meetup V3 回顾|OpenMLBD+SQLFlow+Byzer
响应式织梦模板家居家具建材类网站
Cloud document management software docuware cloud how to solve five it problems