-
Redis集群启动失败、节点无法握手、CLUSTERNODES显示fail或connecting,大概率是Bus端口(clientport+10000)被占用;需确保各节点clientport与其对应bus端口区间互不重叠,如7000→17000,则下一节点clientport至少为17001。
-
Redis卡顿主因是内存满时同步驱逐bigkey,导致主线程阻塞;应启用lazyfree-lazy-eviction、改DEL为UNLINK、用--bigkeys定位大key,并依访问模式选allkeys-random或allkeys-lfu淘汰策略。
-
Redis的String类型加剧内存碎片是因为频繁SET/GET/APPEND导致jemalloc中大小不一的内存块反复分配释放,旧块无法复用而残留为碎片,表现为mem_fragmentation_ratio>1.5且used_memory_rss远大于used_memory。
-
RedisSentinel进程挂了由systemd兜底重启,因其默认可用、配置简洁、日志集成好;需配置Restart=always、明确--sentinel参数、检查端口绑定、配置语法及目录权限,并通过redis-cli验证哨兵实际工作状态。
-
应先检查是否连接泄露,再调整maxclients:通过redis-cliclientlist确认连接是否持续增长,修复Jedis未close问题;若确需扩容,须同步调高系统ulimit-n并重启Redis。
-
哨兵选主按slave-priority、复制偏移量、RunID三步筛选:优先过滤priority为0的节点;再比对offset,越大越优;最后按RunID字典序升序取首个。
-
单纯靠频率限制无法防住缓存穿透,因其无法识别语义非法请求(如user_id=-1),且分布式攻击下单IP低频可绕过;限流仅作为兜底,需与布隆过滤器、空值缓存等联动,并结合多维特征精准识别恶意请求。
-
appendfsyncalways会让Redis卡在磁盘上,因其每条命令都强制调用fsync()等待硬件确认落盘,使QPS被钉死在磁盘IOPS天花板;而everysec通过后台线程批量刷盘解耦主线程与I/O,大幅降低IOPS压力但引入秒级延迟毛刺。
-
redis-cli--hotkeys是基于LFU采样的轻量热Key发现工具,需启用allkeys-lfu/volatile-lfu策略,返回最多32个相对高频key,frequency为归一化值,非实时精确计数,须结合objectfreq、monitor等交叉验证。
-
dump.rdb文件越积越多是因为Redis默认不自动清理旧快照,每次bgsave生成新文件但保留旧文件,需依赖外部脚本按时间戳安全清理。
-
集群模式下slave-read-onlyyes无效,因集群协议绕过主从配置;必须用readonly命令开启连接级只读,使从节点响应本主槽读请求。
-
异步刷新缓存的核心逻辑是命中逻辑过期数据时先返回旧值,再后台异步查库更新缓存,通过expireAt字段判断过期而非Redis物理TTL,并用分布式锁保障并发安全。
-
cluster-node-timeout合理值需根据网络P95延迟×2~3倍设定,局域网常见5000~8000ms,跨机房12000~15000ms,容器环境不低于8000ms;须全节点一致,CONFIGSET仅内存生效,持久化需改配置文件并重启;扩缩容前应临时调大,且tcp-keepalive需配合设置。
-
RedisLua脚本通过KEYS和ARGV接收参数:KEYS存显式声明的key名,ARGV存动态值参数;必须用ARGV传递所有非key参数,避免拼接注入,并注意字符串类型转换与空值处理。
-
扩容易触发缓存雪崩主因是reshard迁移打破key分布与失效节奏,导致大量key集中过期及请求穿透;须在写入阶段强制采用setex+随机TTL(base_ttl±15%~25%variance),禁用固定TTL与热点key长TTL,迁移期改maxmemory-policy为noeviction,并用--threshold1细粒度迁移。