热点数据为什么叫热key,叫key这不是钥匙意思吗,第二个问题,热点数据大为什么会阻塞redis主线程
二、为什么 大Key 会阻塞 Redis 主线程?
先讲 Redis 核心特性,再讲阻塞原因,通俗易懂:
1. Redis 最关键前提:单线程模型(主线程串行执行命令)
Redis 处理读写、删除、过期等所有命令,主要靠一个主线程串行跑:
同一时间,主线程只能处理一条命令,干完一条才换下一条。
2. 大Key 是什么?
两种典型大Key:
1. String 类型:单个 Value 几 MB ~ 几十 MB
2. 容器类型:List / Hash / Set / ZSet 里面元素成千上万
3. 大Key 如何阻塞主线程?
(1)读取大Key
客户端执行 GET / HGETALL / LRANGE 等命令:
• 主线程需要完整遍历、拷贝整个超大数据
• 数据越大,CPU 耗时、内存拷贝耗时越长
• 主线程被“占住”,后面所有请求排队等待 → 整体响应变慢、超时、阻塞
(2)删除 / 过期大Key(危害更大)
Redis 删除、自动过期大Key 时:
• 如果是上万元素的 Hash/List,逐元素删除非常耗时
• 主线程长时间卡在删除逻辑里
• 期间所有正常业务请求全部卡住,直接造成服务抖动、雪崩
(3)网络传输放大影响
大Key 数据包很大:
• 网卡传输耗时增加
• 主线程要等待网络写完数据,进一步拉长阻塞时间