Redis案例:热key导致实例CPU 100%
时间:2022-07-24
本文章向大家介绍Redis案例:热key导致实例CPU 100%,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
前言
在Redis世界里,热key指的是那些在一段时间内访问频率特别高的键值,具体到业务场景,包括热点新闻、热门直播、秒杀活动等等。
热key的问题在于,可能会导致Redis实例CPU使用率100%,或者是网卡流量达到上限等,对系统的稳定性和可用性造成影响;接下来我们看看,在腾讯云数据库Redis中,如何及时发现和解决热key问题。
问题排查
(1)我们可以通过以下命令来进行热key模拟(任意一个都可以)
# redis-benchmark -h xxx -p xxx -a xxx -c 1000 -n 100000000 -t get
# redis-benchmark -h xxx -p xxx -a xxx -c 1000 -n 100000000 script load "redis.call('get','xxx')"
(2)在 控制台-系统监控-监控指标 界面,查看CPU使用率监控,发现一个分片CPU使用率达到100%
(3)在 控制台-系统监控-监控指标 界面,查看请求数监控,发现一个分片请求数很高
(4)在 控制台-系统监控-访问分析 界面,进一步查看监控,发现消耗CPU的命令主要是get和script
(5)在 控制台-系统监控-Key分析 界面,我们可以找出导致CPU打满的罪魁祸首—热key,即key:__rand_int__这个键
解决方案
由于Redis是单线程架构,扩容CPU并不能解决问题,需要业务方进行改造,可以参考的改造方案包括如下:
(1)第一个方案,可以考虑增加应用层的本地缓存;当发现热key后,将热key加载到系统JVM中,这样请求就会直接从JVM中获取,而不会直接打到Redis,减轻了Redis压力。
(2)第二个方案,可以考虑改造热key分布到不同分片;当发现热key后,将hotkey+随机数组合生成一个新key,打散到不同分片,这样就可以通过扩容分片,解决CPU 100%的问题。
(3)第三个方案,可以考虑开启腾讯云数据库Redis的读写分离功能(可能存在数据不一致的情况),这样就通过扩容只读副本的数量,提高读性能。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法