-
必须同时启用io-threads和io-threads-do-reads,否则I/O线程不参与读请求处理;io-threads≥2才生效,需configrewrite或重启;推荐值为min(4,CPU核心数×0.7),NUMA架构下必须用server_cpulist绑定同node核心。
-
Redis 分布式锁最危险的 bug 不是没加锁,而是释放时删掉了后来持有者的锁。本文从锁过期、业务变慢和重复释放的现场出发,说明唯一令牌如何确认所有权,再用 Redis Lua 脚本把校验与删除放进同一个原子动作,最后补上续期、超时和故障恢复边界。
-
Redis6.0的多线程(io-threads)不参与主从同步,因其复制连接走专用路径,绕过I/O线程调度;真正瓶颈在于RDB生成阻塞、从节点CPU解析、网络带宽及repl-backlog过小导致频繁全量同步。
-
缓存雪崩主因是大量key过期时间高度趋同,需通过扫描TTL、监控expired_keys曲线及检查写入逻辑验证;应采用SETEX或SET...EX原子命令,在基础过期时间上叠加5%–20%随机偏移,并确保所有写入路径(含定时任务、MQ、后台)均覆盖随机化。
-
面向线上 Redis 内存告警的运行手册,覆盖触发信号、INFO memory 快速判断、bigkeys 排查、maxmemory 与淘汰策略检查、临时止血、回滚和复盘清单。
-
replica-priority为0表示从库禁止被选为新主,即使唯一存活也会导致故障转移失败;哨兵依据从库INFOREPLICATION中上报的值决策,而非本地配置。
-
彻底禁用RDB自动触发需注释或设为save"",重启或CONFIGREWRITE后CONFIGGETsave返回["save",""],且rdb_changes_since_last_save持续增长即生效。
-
扩容易触发缓存雪崩主因是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参数,避免拼接注入,并注意字符串类型转换与空值处理。
-
双重检查是为防缓存击穿:第一次检查过滤命中请求,第二次检查在锁内确认避免重复查库;必须配合空值缓存防穿透、Lua脚本删锁保原子性。
-
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开销。