-
Redis卡顿是设计使然,因其单线程模型下Lua脚本原子独占主线程,执行长耗时操作会阻塞所有请求,包括过期、AOF、心跳等;复杂聚合应迁出至应用层。
-
PUBLISH命令不能在Redis事务中执行,因其属异步广播机制,与事务的原子性语义冲突;SUBSCRIBE等订阅命令同样禁止入事务,因会切换连接状态;需原子化“改数据+发消息”时应使用Lua脚本。
-
应先用EXISTS检查key存在,再用TYPE校验类型是否为string,因GET对非string类型会直接报错且无法捕获;TYPE返回值严格区分大小写和拼写,须用==全等比较。
-
RDB快照期间内存淘汰变卡是因为fork()触发写时复制且LRU/LFU策略需高频遍历计算,导致CPU负载飙升;可通过切换为random策略、调高maxmemory、启用lazyfree-eviction及优化RDB频率等缓解。
-
主节点应禁用RDB、仅启用AOF(appendonlyyes)并设appendfsync为everysec;AOF重写需协同配置auto-aof-rewrite-percentage(如70)、auto-aof-rewrite-min-size(如64mb)及no-appendfsync-on-rewriteyes;RDB快照宜按业务峰谷调整save策略,避免高频fork。
-
RedisBitmap更新必须用Pipeline,因单次SETBIT网络开销大,10万次独立调用耗时超8秒,Pipeline可压至300ms内,并需显式execute()提交;offset须紧凑映射,key命名要可排序,BITOP前应校验长度,回滚靠双写+原子RENAME。
-
主从复制必须开启AOF,否则从节点重启后数据丢失;从节点需配置appendonlyyes和appendfsynceverysec,主节点也建议开启AOF;切换前须等待aof_pending_bio_fsync为0再开放VIP。
-
ZREM不能直接删除Geo数据,因为它只删除ZSET中的member名称,而非按经纬度范围删除;必须先用GEORADIUS等命令查询出目标member,再调用ZREM精确删除。
-
Redis自动RDB备份不能仅用crontab调用bgsave,因BGSAVE异步返回OK不保证写入完成,需校验rdb_last_save_time和文件非空,并动态获取路径、加超时、轮转清理。
-
网卡PPS打满是吞吐量上不去的常见原因,尤其在小key/value场景下,单请求虽仅60–100字节却生成独立TCP包,易使网卡达到硬件上限。
-
redis-cli--hotkeys是基于LFU采样的轻量热Key发现工具,需启用allkeys-lfu/volatile-lfu策略,返回最多32个相对高频key,frequency为归一化值,非实时精确计数,须结合objectfreq、monitor等交叉验证。
-
哨兵故障转移实际耗时为2–30秒,并非毫秒级;“毫秒级”仅指心跳检测与投票过程。真实恢复时间受down-after-milliseconds配置(建议5000–10000ms)、哨兵多数派机制及客户端行为影响,需配合写前校验或代理层使用。
-
磁盘满是配置失当与监控缺位导致的事故信号,表现为RDB写入失败、AOF重写卡住等错误;根本原因是未限maxmemory、AOF重写阈值过松、过期键堆积及数据与日志混放同一分区。
-
预热时DB被打挂因未限流分片、全量查询触发慢查锁表及连接池耗尽;应按主键分页、加休眠、控制并发、Pipeline分批、设临时标记、渐进切流、拆分Hash结构并监控关键指标。
-
布隆过滤器不支持单元素删除,BF.EXISTS返回true时数据可能已不存在,导致缓存穿透;应改用支持CF.DEL的CuckooFilter或定期重建带时间戳的过滤器。