Redis技术文章
-
根本原因是COW导致RSS内存暴涨触碰maxmemory上限而被迫淘汰;bgsave时fork子进程触发Copy-On-Write,父进程修改内存页即复制物理页,临近maxmemory时瞬时内存增长直接触发淘汰。360 收藏 -
volatile-lru是仅在带TTL的key中按LRU算法驱逐的内存淘汰策略,不处理未设置过期时间的key;会话key必须显式设置TTL,否则成为永生key导致内存溢出。358 收藏 -
不能直接升级所有节点内核,因内核版本差异会导致epoll行为、transparent_hugepage策略、net.core.somaxconn等参数不一致,引发连接拒绝、延迟毛刺或集群握手失败。357 收藏 -
maxclients作用于每个Redis实例(节点)而非整个集群,集群中6个节点需单独配置;其实际生效值取配置值与系统ulimit-n的较小值,且slave节点因承担复制和读请求双重压力更易触顶。354 收藏 -
缓存击穿需用Redis原子命令SETkeyvalueEXsecondsNX加key级互斥锁,配合Lua脚本安全解锁;推荐RedissonRLock自动续期,空值缓存需权衡数据一致性与性能。353 收藏 -
磁盘满是配置失当与监控缺位导致的事故信号,表现为RDB写入失败、AOF重写卡住等错误;根本原因是未限maxmemory、AOF重写阈值过松、过期键堆积及数据与日志混放同一分区。352 收藏 -
内存淘汰不会触发invalidation消息,因其是后台异步驱逐,不走命令执行路径,tracking模块无法感知;只有DEL、SET、EXPIRE等显式变更命令才会触发。351 收藏 -
AOF重写期间used_memory_rss突然翻倍,根本原因是Redis启用双缓冲机制并触发COW大量页复制。主进程同时维护新旧AOF缓冲区,大Key修改或哈希扩容导致RSS飙升1.5–2倍,OOMkiller可能介入。350 收藏 -
调大hash-max-ziplist-entries内存不降反升,因ziplist启用需同时满足entries、value长度及数据紧凑三条件;单个value超hash-max-ziplist-value即退化为hashtable。347 收藏 -
dump.rdb文件越积越多是因为Redis默认不自动清理旧快照,每次bgsave生成新文件但保留旧文件,需依赖外部脚本按时间戳安全清理。344 收藏 -
布隆过滤器不支持单元素删除,BF.EXISTS返回true时数据可能已不存在,导致缓存穿透;应改用支持CF.DEL的CuckooFilter或定期重建带时间戳的过滤器。342 收藏 -
RedisCluster非开箱即用高可用方案,需主动设计拓扑、预估槽位、处理跨槽限制;常见连不上因客户端未启集群模式、总线端口未开放、配置用localhost、多key未同槽、全局命令不支持、脚本事务受槽约束、slot缓存更新滞后等。342 收藏 -
Redis哨兵模式不支持自动伸缩,其核心能力仅限于监控存活、触发故障转移和提供主节点地址;它不参与节点增删、数据分片或路由更新。339 收藏 -
哨兵选主按slave-priority、复制偏移量、RunID三步筛选:优先过滤priority为0的节点;再比对offset,越大越优;最后按RunID字典序升序取首个。339 收藏 -
ZREVRANGE默认返回member(如商品ID),非score;需加WITHSCORES参数才同时返回member和score,结果为交替格式。337 收藏