Redis在企业级环境中的应用
最编程
2024-02-14 20:43:02
...
1、缓存预热
(1)问题排查
- 请求数量较高
- 主从之间数据吞吐量较大,数据同步操作频度较高
(2)解决方案
缓存预热就是在系统启动时,提前将相关的缓存数据加载到 Redis 中,减轻应用直连数据库对数据库造成的压力。
预热过程:
1、日常运营中,统计分析出热点数据;
2、构建数据留存队列;
3、将统计结果中的数据,预先加载到 Redis 中进行预热;
4、提速数据加速过程;
5、使用脚本固化预热过程;
2、缓存雪崩
缓存雪崩就是瞬间过期数据量过大,导致对数据库造成压力
(1)场景:
1、在较短的时间内,大量的 Key 同时过期;
2、此时大量的请求访问过期数据,Redis 未命中,Redis 向数据库进行请求查询;
3、数据库接收到大量的 Redis 请求,无法及时处理,造成 Redis 请求积压,Redis 开始出现超时问题;
4、数据库连接激增,导致数据库崩溃;
5、Redis 服务器资源被严重占用,导致 redis 服务器崩溃;
6、此时客户端请求持续增加,应用服务器崩溃;
7、应用服务器,Redis,数据库全部重启,重启之后缓存中没有数据,面临再次崩溃的局面
(2)解决方案
- 缓存策略切换:LRU 与 LFU 切换;
- 数据有效期策略调整:
- 根据业务数据有效期进行业务错峰;
- 过期数据使用随机数过期,避免过期 Key 集中释放;
- 超热 数据使用永久KEY;
- 适当的进行数据加锁
- 更多的页面静态化处理;
- 构建多级缓存结构,比如 Nginx 缓存,Redis 缓存,应用缓存等;
- 对数据库查询进行优化;
- 构建灾难预警进制:监控 Redis 服务CPU,内存,查询响应时间,线程数等
- 业务限流、降级:短时间内牺牲一些用户体验,限制一部分用户的请求,降低请求压力,待数据、性能恢复之后逐步放开业务;
3、缓存击穿
缓存击穿就是单个超热数据过期的瞬间,Redis 无法命中,大量的请求放行给了数据库,同一时间大量的数据库请求,造成数据崩溃
(1)场景
Redis 中的某个超热 Key 过期了,该Key 无法命中,放行给了数据库查询,造成数据库压力激增;
(2)解决方案:
- 预先设定:预先分析,对超热的 Key 进行延长过期时间的处理;
- 实时监控:实时监控业务流量,对大流量业务进行临时调整;如延长数据过期时间等
- 二级缓存:设置不同失效时间的数据,保证数据不被同时淘汰;
- 加锁:添加分布式锁,防止被击穿;
4、缓存穿透
Redis 中缓存命中率降低,Redis 服务正常,类似恶意绕开缓存。
(1)现象
1、在系统平稳运行的过程,应用服务器流量增大;
2、Redis 服务中心的缓存命中率随着时间逐步降低;但 Redis 内存稳定,CPU占用激增;
3、数据库服务器压力激增,导致数据库服务崩溃;
(2)场景
1、获取的数据在数据库中不存在,数据库查不到,无法进行缓存,每次请求都是直连数据库;
2、出现类似黑客攻击场景,非正常的业务访问;
(3)解决方案
- 白名单策略
- 提前预热各种分类数据对应的 bitmaps,id作为 bitmaps的 offset,相当于设置了数据白名单。当加载正常数据时,放行,加载异常数据时直接拦截(效率偏低)
- 使用布隆过滤器(有关布隆过滤器的命中问题对当前状况可以忽略;
- 实施监控实时监控
- redist命中率(业务正常范国时,通常会有一个波动值)与null数据的占比
- 非活动时段波动:通常检测3-5倍,超过5倍纳入重点排查对象
- 活动时段波动:通常检测10-50倍,超过50倍纳入重点排查对象
- Key 加密
- 问题出现后,临时启动防灾业务key,对key进行业务层传输加密服务,设定校验程序,过来的key校验
- 例如每天随机分配60个加密串,挑选2到3个,混淆到页面数据中,发现访问key不满足规则,驳回数据访问;
上一篇: 使用 Vite 4.3、TypeScript 和 Vue 3 + Pinia 搭建全新企业级前端项目
下一篇: 打造企业级别的开发工具箱:Vite 2 + Vue 3 + TypeScript + Pinia 的完美组合,一定要收藏!
推荐阅读
-
手绘 | 深入分析机器学习在 8 个风控场景中的应用
-
在 Linux 中启动 redis 的方法有哪些?
-
硬件安全模块(HSM)、硬件安全引擎(HSE)和安全硬件扩展(SHE)之间的区别 - HSE 在汽车中的主要应用:
-
载波通信在电网智能中的应用
-
ZH-HPLC/RS485 传输模块在光伏逆变器发电数据采集器中的应用 + 宽带电力线载波 HPLC + 站式智能汇聚终端在分布式光伏并网数据采集与编程中的应用特点
-
Go 语言在云计算中的应用与探索
-
在 Mac 主机上的 Docker 容器中实现图形用户界面显示(运行图形用户界面应用程序)
-
位、字节、WORD、DWORD 的区别和联系 - Unicode 和 ANSI 的区别就像输入法中 "全宽 "和 "半宽 "的区别一样。 由于不同的 ANSI 编码有不同的标准(不同的字符集),对于给定的多字节字符串,我们必须知道它使用的是哪种字符集,才能知道它包含哪些 "字符"。对于 UNICODE 字符串来说,无论环境如何,它所代表的 "字符 "内容始终是相同的。Unicode 有一个统一的标准,定义了世界上大多数字符的编码,因此拉丁文、数字、简体中文、繁体中文和日文都可以存储在一个编码中。统一码是一个统一的标准,定义了世界上大多数字符的编码。 比特(Bit)和字节(Byte)的区别:例如USB2.0 标准接口的传输速率为 480Mbps,有一些人误认为是每秒 480 兆比特,同样网络带宽为 2MB,就容易误认为是每秒 2 兆比特。其实,480Mbps 应该是 480 兆比特/秒或 480 兆字节/秒,它等于 "60 兆字节/秒";同样,2MB,应该是 256 兆字节/秒。 Bit 和 Byte 译为 "比特",都是数据计量单位,比特="位 "或 "比特"。 Byte = 字节,即 1byte = 8bits,两者的换算关系为 1:8。 Mbps = mega bits per second(兆位/秒)是速率单位,因此 2M 带宽应为 2 兆位/秒,即 2MBps。MB = 兆字节(Megabytes,兆字节)是单位量,1MB/S(兆字节/秒)= 8MBPS(兆字节/秒)。 通常所说的硬盘容量是指 40GB、80GB、100GB,其中的 B 是指 Byte 也称为 "字节"。 1 KB=1024 字节 1 MB=1024 KB=1024*1024 字节 1 GB=1024 MB=1024*1024*1024 字节 例如,以前所谓的 56KB MODEM 转换过来的 56KBps 除以 8 就是 7Kbyte,所以真正从网上下载文件存在硬盘上的速度也是每秒 7Kbyte;也就是说,用 B 表示传输速度一般指 Bit;用 B 表示容量一般指 Byte。比特、字节、WORD、DWORD 的本质。
-
文明之旅(一):解开文明的密码--遥感技术在考古学中的应用与探索
-
贪婪算法在 Python、JavaScript、Java、C++ 和 C# 中的多种实现及其在硬币变化、分数骑士、活动选择和使用哈夫曼编码的最小生成树问题中的应用实例