前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis案例:热key导致实例CPU 100%

Redis案例:热key导致实例CPU 100%

原创
作者头像
brightdeng@DBA
修改2020-08-28 21:41:32
2K0
修改2020-08-28 21:41:32
举报

前言

在Redis世界里,热key指的是那些在一段时间内访问频率特别高的键值,具体到业务场景,包括热点新闻、热门直播、秒杀活动等等。

热key的问题在于,可能会导致Redis实例CPU使用率100%,或者是网卡流量达到上限等,对系统的稳定性和可用性造成影响;接下来我们看看,在腾讯云数据库Redis中,如何及时发现和解决热key问题。

问题排查

(1)我们可以通过以下命令来进行热key模拟(任意一个都可以)

代码语言:javascript
复制
# redis-benchmark -h xxx -p xxx -a xxx -c 1000 -n 100000000 -t get
代码语言:javascript
复制
# 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的读写分离功能(可能存在数据不一致的情况),这样就通过扩容只读副本的数量,提高读性能。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 问题排查
  • 解决方案
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档