-
Redis大Value导致网卡打满的典型现象是业务延迟飙升、连接超时且网卡出向流量持续90%+,而CPU和内存正常;根本原因是GET/HGETALL返回几十MB未压缩value,在客户端与Redis间反复传输;Redis服务端不支持自动压缩,必须由客户端在序列化后、写入前用LZ4(推荐)或GZIP压缩,并在key中标记压缩方式,读取时依标识解压,否则易因误解bytes为str或跳过校验导致乱码或异常。
-
Redis原生SINTER不支持带权重或条件过滤的交集计算,因其仅做纯元素匹配;需用Lua脚本在服务端原子执行复杂逻辑,但须防范阻塞、性能与维护风险。
-
能,从库可记录慢查询日志但需在redis.conf中显式配置slowlog-log-slower-than和slowlog-max-len,主库配置不自动同步,且慢日志为实例级本地行为。
-
哨兵选主失败或频繁切换的根本原因是时钟偏差过大或网络单向隔离;需先用ntpstat和chronyctracking检查时钟同步,再用tcpdump验证26379端口双向通信,最后才调整哨兵参数。
-
RedisPub/Sub不适用于金融交易场景,因其纯内存、无持久化、无确认机制,导致消息必然丢失;集群下无全局顺序且不支持事务,应改用Streams或Kafka。
-
不能。RedisPub/Sub不具备持久化、ACK、重试机制,断连即丢消息,仅适用于实时性高、允许丢失的场景,如状态刷新、日志广播;不适用于订单、支付等需可靠传递的业务。
-
单纯靠TTL随机化不能根治缓存雪崩,但它是成本最低、见效最快的前置防线——关键在于“错开”而非“随机”,且必须配合过期时间分级和热点识别。
-
开启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,通过空查日志聚类+内存黑名单防控。