-
RedisPub/Sub不直接产生内存碎片,但未清理的订阅连接、消息积压或缓冲区配置不当会推高used_memory_rss,导致mem_fragmentation_ratio偏高,形成“假性碎片”;真实碎片源于键值对频繁增删改,而Pub/Sub缓冲区不受active-defrag影响。430 收藏 -
CLUSTERKEYSLOT仅执行CRC16(key)mod16384计算,返回0–16383的槽号,不查询集群拓扑或节点信息;定位具体实例需配合CLUSTERSLOTS或CLUSTERNODES查找槽所属节点。429 收藏 -
Redis6.2+需用--cluster参数运行redis-benchmark,否则MOVED/ASK重定向导致QPS归零;低版本需手动固定槽位或升级。428 收藏 -
allkeys-random并非真正无差别:它只在内存达限且写入触发时,从永不过期的主字典key中伪随机删除,不考虑访问频次、大小或热度,易误删热图;应改用allkeys-lru或ZSET+定时清理。427 收藏 -
必须分片,因单keyGEOADD底层ZSET会导致查询O(logN+M)延迟、RDB/AOFfork超时、无法水平扩展;应按Geohash前4-5位分key,查时用邻区算法并发查最多9个key并合并去重排序。418 收藏 -
直接调大save触发阈值是最有效、最安全的手段,通过修改redis.conf中save配置项(如将save6010000改为save30050000),可降低RDB快照频率,缓解磁盘IO压力,但需结合数据丢失容忍度与写入节奏合理设置。417 收藏 -
cluster-node-timeout合理值需根据网络P95延迟×2~3倍设定,局域网常见5000~8000ms,跨机房12000~15000ms,容器环境不低于8000ms;须全节点一致,CONFIGSET仅内存生效,持久化需改配置文件并重启;扩缩容前应临时调大,且tcp-keepalive需配合设置。417 收藏 -
RedisStream不受maxmemory-policy淘汰机制影响,仅XADD的MAXLEN/MINID参数可在写入时截断数据;MAXLEN加~为近似截断,不加则严格控制条数,且只从最老端删除;消费者组未XACK会导致PEL积压,MAXLEN无法清理。410 收藏 -
根本原因是repl-backlog-size过小或网络闪断超时,导致从节点重连时偏移量超出缓冲区范围而无法增量同步,被迫触发全量同步。409 收藏 -
不能直接用RedisPub/Sub做缓存一致性保障,因其不保证消息可达,订阅者离线时消息丢失,无重试、ACK或持久化机制;必须结合RedisStream落地事件+数据库状态校验实现最终一致。405 收藏 -
ZUNIONSTORE合并多个ZSet时相同member的score默认相加;海量数据下会严重阻塞Redis主线程;需注意目标key编码、memberID统一及分批合并等实践要点。402 收藏 -
AOF文件无法直接看出某条key被谁改过,因其仅记录命令文本,不包含时间戳、客户端ID或用户标识;需通过业务层打标或Proxy日志实现审计溯源。398 收藏 -
从节点默认不执行任何过期逻辑,仅重放主节点发来的DEL等命令;必须设maxmemory-policy为noeviction(或7.0+启用replica-ignore-maxmemoryyes)防止主动淘汰破坏一致性。396 收藏 -
noeviction是金融级系统唯一可接受的内存策略,它通过写入失败显式暴露容量瓶颈,杜绝后台自动删数据;淘汰策略属兜底补救,非容量规划手段,须配合85%阈值告警、自动化扩容及OOM错误处理闭环。395 收藏 -
直接用SETNX易误删锁,因加锁与设过期非原子操作,且释放锁未校验线程标识;正确做法是SET+NX+EX原子加锁并用Lua脚本校验值后删除。393 收藏