Redis企业级解决方案

211 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第19天,点击查看活动详情

企业级解决方案

下面介绍一些企业中常用的redis解决方案,这也是一些岗位面试的重点。

缓存预热

缓存预热指的是在系统启动前,提前将相关的缓存数据直接加载到缓存系统,避免在用户请求的时候,先查询数据库,然后再将数据缓存的问题,这样用户就可以直接查询到事先被预热的缓存数据。

比如日常例行统计数据访问记录,统计出访问频度较高的热点数据,并将统计结果中的数据分类,根据级别,让redis优先加载级别较高的热点数据,一般使用脚本程序来固定触发数据预热过程。

缓存雪崩

缓存在同一时间大面积的失效,导致请求直接落到了数据库上,造成数据库短时间内承受大量请求,很有可能导致数据库直接崩溃。

亦或者一些热点数据在某一时刻大面积失效,导致对应的请求直接落到了数据库上也导致数据库直接崩溃。

解决办法:

  • 构建多级缓存的架构
  • 优化数据库 耗时的业务
  • 监控redis服务性能指标
  • 对服务进行限流、降级

对于热点数据在某一时刻大面积失效的情况,我们可以为这些数据设置不同的失效时间,比如给它们随机设置失效时间,那么就不会出现数据大面积失效的情况了。

缓存击穿

缓存击穿与缓存雪崩非常类似,也是因为大量的请求落到了数据库上导致数据库崩溃,但不同的是,缓存雪崩是大量缓存数据同时失效导致大量的请求落到了数据库;而缓存击穿通常指并发访问同一条数据,解决方案也与缓存雪崩大体相同。

缓存穿透

缓存穿透指的是用户查询的数据在缓存中没有,在数据库中也没有,如发起id等于-1或者id等于非常大的值的请求,这些数据肯定是不存在的,这个时候的用户很有可能是网站的攻击者,这样的攻击请求会导致数据库压力过大进而崩溃。

解决方案:

  • 增加校验逻辑,如检验id是否合法
  • 当数据从缓存和数据库中都未获取到时,将key的value值写为null,这样可以防止攻击者反复使用一个id进行攻击