-
Redis卡顿主因是内存满时同步驱逐bigkey,导致主线程阻塞;应启用lazyfree-lazy-eviction、改DEL为UNLINK、用--bigkeys定位大key,并依访问模式选allkeys-random或allkeys-lfu淘汰策略。
-
AOF重写内存暴增主因是fork的Copy-on-Write机制触发页拷贝+重写缓冲区累积;可通过infomemory差值、日志、aof_pending_rewrite交叉定位;缓解需停自动触发、手动完成重写,并调优auto-aof-rewrite-percentage等参数缩短重写时长。
-
RDB快照期间内存淘汰变卡是因为fork()触发写时复制且LRU/LFU策略需高频遍历计算,导致CPU负载飙升;可通过切换为random策略、调高maxmemory、启用lazyfree-eviction及优化RDB频率等缓解。
-
Redis集群选举必须过半数Master同意,因其采用类Raft共识机制,要求至少(N/2+1)个在线Master投票通过,以防网络分区导致脑裂和数据不一致。
-
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协同配置以主动断连并释放内存。
-
RDB和AOF不能防止雪崩,仅决定宕机后数据能否快速完整恢复;RDB加载失败主因是路径、权限、版本不兼容或未启用;AOF截断需设aof-load-truncatedyes临时解决;Redis优先用AOF恢复;加载后keyTTL已过期,须配合缓存预热。
-
哨兵通过“客观下线”(ODOWN)判断主节点真挂了:单个哨兵连不上仅为主观下线(SDOWN),需至少quorum个哨兵达成一致才触发ODOWN;哨兵间用SENTINELis-master-down-by-addr命令确认,非心跳广播,网络分区可能导致结论不一。
-
RedisLua脚本通过KEYS和ARGV接收参数:KEYS存显式声明的key名,ARGV存动态值参数;必须用ARGV传递所有非key参数,避免拼接注入,并注意字符串类型转换与空值处理。
-
必须用Lua脚本做抢红包,因其能原子执行读取余额、扣减金额、写入中奖记录、更新过期时间等操作;客户端多步命令易因并发或网络中断导致脏数据。
-
RedisPub/Sub不适合用户级一对一聊天,因其消息不持久、无离线保障、无ACK机制、不支持点对点推送、无权限控制且无法保证消息顺序。
-
单靠DECR会超卖,因其校验库存是否>0与扣减是两步非原子操作,高并发下多个客户端可能同时读到库存=1后均执行DECR导致负数;必须用Lua脚本将判断与扣减封装为单次原子执行。
-
Redis集群原生不支持灰度发布,需通过Proxy(如Predixy)或客户端SDK实现key前缀路由,注意代理高可用、跨集群事务拦截、连接池隔离及日志打标。
-
Redis集群写入失败需先确认是否真不可写:常见原因是客户端连只读节点或未处理ASK/MOVED重定向;检查CLUSTERNODES中fail?(疑似下线)或fail(客观下线)状态;CLUSTERFAILOVER仅在从节点、主节点在线、偏移量合规且非CLUSTERDOWN时生效;主节点宕机且无自动转移时,才需在健康从节点执行CLUSTERFAILOVERFORCE,并对旧主执行CLUSTERRESETHARD。