-
Redis客户端重连易打挂新主库,因默认“失败即重试”导致连接风暴;需配置指数退避+随机抖动(如Lettuce用ExponentialBackoffRetry.withJitter)、Go端自定义DialContext重试逻辑,并控制初始延迟50–100ms、最大延迟≤3s、重试8–12次。
-
RedisPub/Sub监控需聚焦连接行为与资源消耗:用PUBSUBNUMSUB查实时订阅数,instantaneous_output_kbps和client_longest_output_list组合判断积压,connected_clients与connections_received_per_sec协同识别频繁重连。
-
INCRBY不能直接用作全局唯一ID,因其在主从复制延迟、Redis重启无持久化、分片集群跨slot等场景下会导致ID重复或跳变;可靠方案是时间戳+原子自增组合,并需开启AOF、Lua封装、slot标签等保障措施。
-
使用布隆过滤器防护缓存穿透是因为它能快速判断元素是否可能存在,拦截不存在的请求,保护数据库。Redis布隆过滤器通过低内存占用高效判断元素存在性,成功拦截无效请求,减轻数据库压力。尽管存在误判率,但这种误判在缓存穿透防护中是可接受的。
-
MAXLEN是RedisStreams唯一实时限长方式,必须与XADD原子配合使用;~N为近似保留,N为严格上限;XTRIM仅作兜底,非实时;语法中MAXLEN须紧随stream名后,错位即报错。
-
PUBLISH命令不能在Redis事务中执行,因其属异步广播机制,与事务的原子性语义冲突;SUBSCRIBE等订阅命令同样禁止入事务,因会切换连接状态;需原子化“改数据+发消息”时应使用Lua脚本。
-
RedisPub/Sub不保存消息,断连即丢消息,无法满足即时通讯的离线兜底需求;必须用Stream(XADD/XREAD)持久化消息,Pub/Sub仅作在线实时广播通道。
-
RedisSET命令不全局阻塞,但单次执行时间随value长度线性增长,占用主线程导致后续命令延迟;大value主要瓶颈在内存分配、拷贝与驱逐逻辑,可通过SLOWLOG和latency-monitor验证,优化方式包括拆分key、改用Stream/Hash或移出大blob。
-
缓存雪崩是大量key集中过期或Redis实例不可用导致请求直击数据库,引发数据库过载崩溃;需通过TTL随机偏移错峰过期、熔断降级、本地缓存兜底及禁用危险命令等手段防御。
-
应使用HSET分字段存储用户资料而非SET存JSON,因其支持原子性单字段操作、避免并发覆盖、节省带宽;字段名须全小写下划线;慎用HGETALL防性能陷阱;Hash无内置TTL,需显式EXPIRE。
-
Redis6+集群启用TLS需版本≥6.0且编译时启用OpenSSL(makeBUILD_TLS=yes),OpenSSL≥1.1.1,所有节点共用同一CA证书,配置必须包含tls-cert-file、tls-key-file、tls-ca-cert-file、tls-clusteryes、tls-replicationyes,客户端需指定--cacert,证书更新须滚动重启。
-
Redis内存过载时jemalloc拒绝分配,是因内部碎片或保留页不足主动返回NULL触发OOMerror,与LinuxOOMKiller无关;关键看INFOmemory中allocator_allocated、active、mapped的剪刀差而非used_memory。
-
SAVE命令会阻塞Redis主进程同步写入RDB文件,期间不处理任何请求;适用于停机前且可接受中断的场景,但生产环境应优先用BGSAVE,配合AOF才能保障数据不丢。
-
Redis原生SINTER不支持带权重或条件过滤的交集计算,因其仅做纯元素匹配;需用Lua脚本在服务端原子执行复杂逻辑,但须防范阻塞、性能与维护风险。
-
bgsave不阻塞Redis主线程,因其fork后由子进程独立完成RDB生成,主线程立即恢复服务;卡顿仅发生在fork阶段,大内存实例页表复制开销显著。