核心内容摘要
在家泡泡浴:第一季的温柔回响,唤醒你心底的诗意
首先我们要搞清楚大key和热key是什么。
大Key通常以Key的大小和Key中成员的数量来综合判定。
比如Key本身的Value过大一个String类型的Key它的值为10 MBKey中的成员数过多一个ZSET类型的Key它的成员数量为10000个。
热key通常以其接收到的Key被请求频率来判定例如QPS集中在特定的KeyRedis实例的总QPS为10000而其中一个Key的每秒访问量达到了8000。
导致的问题大Key一般产生的问题就是占用大量的带宽以及资源资源导致系统出现OOM访问阻塞等问题。
热Key占用大量的CPU资源影响其他请求并导致整体性能降低。
如何找到大Key和热Key呢通过redis-cli的bigkeys和hotkeys参数查找大Key和热Key当然如果有第三方监控平台也是可以的。
解决办法
针对大key的问题我们可以对大Key进行拆分例如将含有数万成员的一个HASH Key拆分为多个HASH Key并确保每个Key的成员数量在合理范围。
在Redis集群架构中拆分大Key能对数据分片间的内存平衡起到显著作用。
定期进行清理掉无效的key腾出更多的内存空间。
针对热Key的问题在Redis集群架构中对热Key进行复制然后改名迁移到其他分片。
例如将热Key foo复制出3个内容完全一样的Key并名为foo
foo
foo4将这三个Key迁移到其他数据分片来解决单个数据分片的热Key压力。
读写分离如果热Key的产生来自于读请求可以将实例改造成读写分离架构来降低每个数据分片的读请求压力甚至可以不断地增加从节点。
做好系统的监测建立预警机制提前做好防范。