-
扩容易触发缓存雪崩主因是reshard迁移打破key分布与失效节奏,导致大量key集中过期及请求穿透;须在写入阶段强制采用setex+随机TTL(base_ttl±15%~25%variance),禁用固定TTL与热点key长TTL,迁移期改maxmemory-policy为noeviction,并用--threshold1细粒度迁移。
-
Redis6.0+才正式支持volatile-lfu和allkeys-lfu,低版本会静默降级为LRU;需通过CONFIGGET/SET确认并热生效策略,商品Key须按粒度命名(如prod:sku:10086)并用INCR+EXPIRE维护热度,OBJECTFREQ返回0–255近似值仅适用于相对排序,不反映真实访问次数。
-
<p>Redis7.2优化内存淘汰池,将evictionPoolEntry.key由sds改为非持有型char*指针,避免memcpy和重复内存分配,显著降低高采样数下的CPU开销,不改变淘汰逻辑。</p>
-
直接调大save触发阈值是最有效、最安全的手段,通过修改redis.conf中save配置项(如将save6010000改为save30050000),可降低RDB快照频率,缓解磁盘IO压力,但需结合数据丢失容忍度与写入节奏合理设置。
-
Redis数据丢失后首先确认是否开启持久化,90%情况实为未启用;需用redis-cliconfigget验证运行时AOF/RDB状态,检查appendfsync模式及AOF文件完整性。
-
RedisLua脚本中不能直接执行SET等命令,必须通过redis.call()或redis.pcall()调用;MULTI/EXEC等事务命令禁用;所有key需显式传入,集群下须同slot;返回值类型需手动判断,避免误判false/0。
-
应使用HSET分字段存储用户资料而非SET存JSON,因其支持原子性单字段操作、避免并发覆盖、节省带宽;字段名须全小写下划线;慎用HGETALL防性能陷阱;Hash无内置TTL,需显式EXPIRE。
-
哨兵通过“客观下线”(ODOWN)判断主节点真挂了:单个哨兵连不上仅为主观下线(SDOWN),需至少quorum个哨兵达成一致才触发ODOWN;哨兵间用SENTINELis-master-down-by-addr命令确认,非心跳广播,网络分区可能导致结论不一。
-
不能直接用HGET+EXPIRE组合刷新TTL,因存在竞态条件:HGET后key可能立即过期导致EXPIRE失败,且并发时多个客户端执行EXPIRE仅首个成功;Lua脚本能原子执行“查+刷”,用HEXISTS和EXPIREAT确保安全续命。
-
Redis集群节点宕机是否自动恢复,取决于它是不是主节点、有没有足够多的主节点在线投票,以及从节点是否满足参选资格;不是所有宕机都会触发转移,更不是宕机后立刻切换。
-
allkeys-random并非真正无差别:它只在内存达限且写入触发时,从永不过期的主字典key中伪随机删除,不考虑访问频次、大小或热度,易误删热图;应改用allkeys-lru或ZSET+定时清理。
-
必须同时排除RedisAutoConfiguration和RedisRepositoriesAutoConfiguration,否则因后者依赖redisTemplate而启动失败;exclude参数需传入Class数组,配置文件中须正确书写全限定名并避免缩进错误,且需清理残留Redis属性和手动Bean。
-
down-after-milliseconds不是触发故障转移的开关,仅决定哨兵何时标记主节点为主观下线(SDOWN);完成自动切换需满足quorum票数达成客观下线(ODOWN),再经选举和failover-timeout窗口内执行完整流程。
-
Redis卡顿但命令不慢,主因是系统级资源竞争:CPU中断、NUMA错配、swap抖动、TCP队列溢出、透明大页fork阻塞、磁盘IO毛刺等,需逐项排查验证。
-
RedisCluster非开箱即用高可用方案,需主动设计拓扑、预估槽位、处理跨槽限制;常见连不上因客户端未启集群模式、总线端口未开放、配置用localhost、多key未同槽、全局命令不支持、脚本事务受槽约束、slot缓存更新滞后等。