在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的读写分离功能(可能存在数据不一致的情况),这样就通过扩容只读副本的数量,提高读性能。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。