-
开启lazyfree-lazy-evictionyes且Redis≥6.0后,淘汰策略触发的内存释放由后台线程异步执行,主线程不再被同步释放大Key卡住。
-
不能直接用RedisPub/Sub做缓存一致性保障,因其不保证消息可达,订阅者离线时消息丢失,无重试、ACK或持久化机制;必须结合RedisStream落地事件+数据库状态校验实现最终一致。
-
RedisString底层使用SDS而非C字符串,具备O(1)长度获取、二进制安全等特性;其内存布局含sdshdr头(因类型不同为4/6字节)与数据,小字符串存在固定开销;扩容采用几何增长策略易造成内存浪费;≤44字节时启用embstr编码以节省内存和指针跳转开销。
-
RedisStream消费组重试需手动干预:XPENDING加范围与消费者参数定位卡点,XCLAIM配FORCE和MIN-IDLE-TIME安全转移消息,XACK须在业务真正成功后调用,Redis5.0.5需自行轮询XPENDING实现自动重试。
-
redis-check-aof--fix是唯一能直接修复尾部截断类AOF损坏的官方手段,但仅删除末尾无效字节,不恢复中间损坏或语义错误命令;遇Badfileformat错误需先备份、核对版本与路径,注意模块命令兼容性及系统层限制。
-
EVAL需原子性保证竞态安全,因Redis将Lua脚本作为不可分割的单次操作执行,避免“先查后改”在高并发下的数据丢失;其原子性非源于Lua线程安全,而是Redis调度机制保障。
-
主从同步突然变成全量复制,大概率因从节点偏移量超出主节点复制积压缓冲区范围;可通过inforeplication比对master_repl_offset、repl_backlog_first_byte_offset和repl_backlog_size判断是否缓冲区循环覆盖,再结合run_id是否变更、是否首次连接等排查。
-
用RedisINFOstats的keyspace_hits和keyspace_misses实时计算命中率,低于70%且5分钟滚动均值持续异常即告警;结合DB空查询日志确认缓存穿透;布隆过滤器须前置、全量预热、与DB写操作强一致,拦截非法ID;对已存在但已失效的ID,通过空查日志聚类+内存黑名单防控。
-
LPUSH+LPOP无法自动限长,因LPOP删队首而新元素入队尾,导致长度持续增长;唯一可靠方式是LPUSH后立即LTRIM,或用Lua脚本原子执行推入与截断。
-
Pub/Sub是无存储的实时广播机制,消息断连即丢,适合允许丢失的在线通知;Stream是带ACK的持久化消息队列,支持回溯、消费者组和精确控制,但需手动管理XACK与MAXLEN。
-
<p>缓存雪崩主因是大量Key集中过期,解决需打散过期时间并避免全量失效;分片本身不防雪崩,但结合一致性哈希与分片ID固定偏移(如offset=shard_id*60)可强制错峰过期,比随机更可控。</p>
-
内存淘汰不会触发invalidation消息,因其是后台异步驱逐,不走命令执行路径,tracking模块无法感知;只有DEL、SET、EXPIRE等显式变更命令才会触发。
-
SCRIPTKILL只能终止未执行写命令的脚本;一旦调用redis.call('set')等写操作,脚本变为UNKILLABLE,因Redis为保障原子性禁止中途终止,否则可能导致数据不一致。
-
是的。shutdown默认执行同步RDB保存,前提是redis.conf中存在未注释的有效save规则(如save6010000),且磁盘空间充足、无阻塞命令;它会先落盘再断连最后退出。
-
RedisSET命令不全局阻塞,但单次执行时间随value长度线性增长,占用主线程导致后续命令延迟;大value主要瓶颈在内存分配、拷贝与驱逐逻辑,可通过SLOWLOG和latency-monitor验证,优化方式包括拆分key、改用Stream/Hash或移出大blob。