-
集群模式下slave-read-onlyyes无效,因集群协议绕过主从配置;必须用readonly命令开启连接级只读,使从节点响应本主槽读请求。
-
allkeys-random并非真正无差别:它只在内存达限且写入触发时,从永不过期的主字典key中伪随机删除,不考虑访问频次、大小或热度,易误删热图;应改用allkeys-lru或ZSET+定时清理。
-
直接调大save触发阈值是最有效、最安全的手段,通过修改redis.conf中save配置项(如将save6010000改为save30050000),可降低RDB快照频率,缓解磁盘IO压力,但需结合数据丢失容忍度与写入节奏合理设置。
-
cluster-node-timeout合理值需根据网络P95延迟×2~3倍设定,局域网常见5000~8000ms,跨机房12000~15000ms,容器环境不低于8000ms;须全节点一致,CONFIGSET仅内存生效,持久化需改配置文件并重启;扩缩容前应临时调大,且tcp-keepalive需配合设置。
-
单纯靠频率限制无法防住缓存穿透,因其无法识别语义非法请求(如user_id=-1),且分布式攻击下单IP低频可绕过;限流仅作为兜底,需与布隆过滤器、空值缓存等联动,并结合多维特征精准识别恶意请求。
-
Redis集群节点宕机是否自动恢复,取决于它是不是主节点、有没有足够多的主节点在线投票,以及从节点是否满足参选资格;不是所有宕机都会触发转移,更不是宕机后立刻切换。
-
appendfsyncalways会让Redis卡在磁盘上,因其每条命令都强制调用fsync()等待硬件确认落盘,使QPS被钉死在磁盘IOPS天花板;而everysec通过后台线程批量刷盘解耦主线程与I/O,大幅降低IOPS压力但引入秒级延迟毛刺。
-
dump.rdb文件越积越多是因为Redis默认不自动清理旧快照,每次bgsave生成新文件但保留旧文件,需依赖外部脚本按时间戳安全清理。
-
异步刷新缓存的核心逻辑是命中逻辑过期数据时先返回旧值,再后台异步查库更新缓存,通过expireAt字段判断过期而非Redis物理TTL,并用分布式锁保障并发安全。
-
扩容易触发缓存雪崩主因是reshard迁移打破key分布与失效节奏,导致大量key集中过期及请求穿透;须在写入阶段强制采用setex+随机TTL(base_ttl±15%~25%variance),禁用固定TTL与热点key长TTL,迁移期改maxmemory-policy为noeviction,并用--threshold1细粒度迁移。
-
哨兵通过“客观下线”(ODOWN)判断主节点真挂了:单个哨兵连不上仅为主观下线(SDOWN),需至少quorum个哨兵达成一致才触发ODOWN;哨兵间用SENTINELis-master-down-by-addr命令确认,非心跳广播,网络分区可能导致结论不一。
-
RedisLua脚本通过KEYS和ARGV接收参数:KEYS存显式声明的key名,ARGV存动态值参数;必须用ARGV传递所有非key参数,避免拼接注入,并注意字符串类型转换与空值处理。
-
Redis6.0+才正式支持volatile-lfu和allkeys-lfu,低版本会静默降级为LRU;需通过CONFIGGET/SET确认并热生效策略,商品Key须按粒度命名(如prod:sku:10086)并用INCR+EXPIRE维护热度,OBJECTFREQ返回0–255近似值仅适用于相对排序,不反映真实访问次数。
-
应使用HSET分字段存储用户资料而非SET存JSON,因其支持原子性单字段操作、避免并发覆盖、节省带宽;字段名须全小写下划线;慎用HGETALL防性能陷阱;Hash无内置TTL,需显式EXPIRE。
-
Redis数据丢失后首先确认是否开启持久化,90%情况实为未启用;需用redis-cliconfigget验证运行时AOF/RDB状态,检查appendfsync模式及AOF文件完整性。