-
RedisCluster非开箱即用高可用方案,需主动设计拓扑、预估槽位、处理跨槽限制;常见连不上因客户端未启集群模式、总线端口未开放、配置用localhost、多key未同槽、全局命令不支持、脚本事务受槽约束、slot缓存更新滞后等。
-
Redis哨兵模式不支持自动伸缩,其核心能力仅限于监控存活、触发故障转移和提供主节点地址;它不参与节点增删、数据分片或路由更新。
-
哨兵选主按slave-priority、复制偏移量、RunID三步筛选:优先过滤priority为0的节点;再比对offset,越大越优;最后按RunID字典序升序取首个。
-
setIfAbsent不够安全,因其无法原子性设置过期时间,易导致锁永久不释放;Redis推荐用SETkeyvalueNXEXseconds一步完成,但SpringDataRedis老版本setIfAbsent不支持EX参数。
-
主节点配置requirepass后从节点同步失败,因从节点未配置masterauth导致认证失败;需在从节点配置文件中设置masterauth或运行时CONFIGSET,并配合ACL权限、bind限制与防火墙加固。
-
异步刷新缓存的核心逻辑是命中逻辑过期数据时先返回旧值,再后台异步查库更新缓存,通过expireAt字段判断过期而非Redis物理TTL,并用分布式锁保障并发安全。
-
全量复制触发时,Redis主节点必须生成RDB文件,因为从节点初次连接或断连太久后无法仅靠增量命令追上主节点,主节点需将当前完整数据集打包成RDB文件传给从节点以保证状态一致。
-
缓存雪崩主因是大量key过期时间高度趋同,需通过扫描TTL、监控expired_keys曲线及检查写入逻辑验证;应采用SETEX或SET...EX原子命令,在基础过期时间上叠加5%–20%随机偏移,并确保所有写入路径(含定时任务、MQ、后台)均覆盖随机化。
-
彻底禁用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。
-
直接引入spring-session-data-redis即可,它自动适配SpringBoot2.7+的Lettuce;避免手动引入jedis、错误配置redis属性、使用默认JDK序列化,需改用GenericJackson2JsonRedisSerializer,并确保Redis高可用与Cookie正确隔离。
-
根本原因是复制积压缓冲区(repl-backlog)持续增长:失联从节点未被及时清理时,主节点仍向共享的环形缓冲区追加命令,导致内存只增不减;repl-diskless-sync仅影响全量同步传输方式,不控制增量缓存,真正关键的是repl-timeout与client-output-buffer-limitslave协同配置以主动断连并释放内存。
-
哨兵通过“客观下线”(ODOWN)判断主节点真挂了:单个哨兵连不上仅为主观下线(SDOWN),需至少quorum个哨兵达成一致才触发ODOWN;哨兵间用SENTINELis-master-down-by-addr命令确认,非心跳广播,网络分区可能导致结论不一。