-
Redis6.0的多线程(io-threads)不参与主从同步,因其复制连接走专用路径,绕过I/O线程调度;真正瓶颈在于RDB生成阻塞、从节点CPU解析、网络带宽及repl-backlog过小导致频繁全量同步。
-
replica-priority为0表示从库禁止被选为新主,即使唯一存活也会导致故障转移失败;哨兵依据从库INFOREPLICATION中上报的值决策,而非本地配置。
-
扩容易触发缓存雪崩主因是reshard迁移打破key分布与失效节奏,导致大量key集中过期及请求穿透;须在写入阶段强制采用setex+随机TTL(base_ttl±15%~25%variance),禁用固定TTL与热点key长TTL,迁移期改maxmemory-policy为noeviction,并用--threshold1细粒度迁移。
-
Redis卡顿主因是内存满时同步驱逐bigkey,导致主线程阻塞;应启用lazyfree-lazy-eviction、改DEL为UNLINK、用--bigkeys定位大key,并依访问模式选allkeys-random或allkeys-lfu淘汰策略。
-
Redis3.0的evictionpool是一个固定长度为16的数组,用于淘汰前暂存采样键的近似空闲时间和键名,通过多轮随机采样、保序插入与top-K筛选,提升冷热识别鲁棒性,避免单次采样误驱逐热点key。
-
哨兵通过“客观下线”(ODOWN)判断主节点真挂了:单个哨兵连不上仅为主观下线(SDOWN),需至少quorum个哨兵达成一致才触发ODOWN;哨兵间用SENTINELis-master-down-by-addr命令确认,非心跳广播,网络分区可能导致结论不一。
-
RedisLua脚本通过KEYS和ARGV接收参数:KEYS存显式声明的key名,ARGV存动态值参数;必须用ARGV传递所有非key参数,避免拼接注入,并注意字符串类型转换与空值处理。
-
RedisRDB快照生成失败时bgsave返回ERR,主因是fork()系统调用失败,典型表现为日志中出现“Failedtofork()forRDB:Cannotallocatememory”或“Resourcetemporarilyunavailable”,根本原因在于Linux的vm.overcommit_memory设置不当(默认0易拒绝fork)、内存压力过大、ulimit-u或pid_max耗尽,或cgroup内存限制过严;应将vm.overcommit_memory设为1并检查cgroup限制
-
不会阻塞。RDB持久化由fork()子进程执行,主线程继续处理请求;依赖Linux内核写时复制(COW)机制,fork后父子进程共享物理内存页,仅在修改时才复制对应页,保证子进程读取fork时刻快照,但高写入会加剧COW开销。
-
RedisExporter连不上主因是认证或网络策略:启用密码需显式传参--redis.password;Docker部署注意网络模式;ACL需授予INFO/CONFIG/CLIENTLIST权限;Prometheustargets应指向exporter的9121端口而非Redis的6379。
-
FUNCTIONLOAD将函数库作为数据库对象持久化并复制,SCRIPTLOAD仅内存缓存脚本且不落盘、不复制;前者支持高可用与跨节点复用,后者重启或主从切换后即失效。
-
云盘IOPS不足会导致bgsave失败或超时,因RDB全量写入触发IO拥塞,表现为“Nospaceleftondevice”错误(实际空间充足);需升级ESSDPL1及以上云盘、确认dir指向高IOPS数据盘、启用混合持久化并禁用save命令。
-
BloomFilter不能单独用于消息去重,因其存在误判率;必须配合Redis的SET或ZSET做最终校验:SET适用于简单幂等场景,ZSET支持滑动窗口限频,典型流程为BloomFilter预筛→Redis精确判定→三重写入。
-
Redis集群启动失败、节点无法握手、CLUSTERNODES显示fail或connecting,大概率是Bus端口(clientport+10000)被占用;需确保各节点clientport与其对应bus端口区间互不重叠,如7000→17000,则下一节点clientport至少为17001。
-
Redis默认tcp-keepalive关闭(值为0),需主从双方redis.conf显式配置tcp-keepalive300并重启生效,且须与repl-timeout≥300协同调整,否则连接假活导致复制卡死。