-
notify-keyspace-events开启后会显著增加CPU开销,因其在每个命令执行后强制执行事件广播逻辑,即使无人订阅;高写入场景下DEL、EXPIRE、SET等操作均触发线性增长的事件生成与分发。
-
不能直接升级所有节点内核,因内核版本差异会导致epoll行为、transparent_hugepage策略、net.core.somaxconn等参数不一致,引发连接拒绝、延迟毛刺或集群握手失败。
-
maxclients作用于每个Redis实例(节点)而非整个集群,集群中6个节点需单独配置;其实际生效值取配置值与系统ulimit-n的较小值,且slave节点因承担复制和读请求双重压力更易触顶。
-
磁盘满是配置失当与监控缺位导致的事故信号,表现为RDB写入失败、AOF重写卡住等错误;根本原因是未限maxmemory、AOF重写阈值过松、过期键堆积及数据与日志混放同一分区。
-
内存淘汰不会触发invalidation消息,因其是后台异步驱逐,不走命令执行路径,tracking模块无法感知;只有DEL、SET、EXPIRE等显式变更命令才会触发。
-
AOF重写期间used_memory_rss突然翻倍,根本原因是Redis启用双缓冲机制并触发COW大量页复制。主进程同时维护新旧AOF缓冲区,大Key修改或哈希扩容导致RSS飙升1.5–2倍,OOMkiller可能介入。
-
Redis事务通过将多个命令打包一次性执行,提供有限的原子性和隔离性。其核心实现步骤为:1.MULTI开启事务;2.命令入队但不立即执行;3.EXEC按顺序执行队列中的命令并返回结果;4.DISCARD取消事务。WATCH用于监控key以实现乐观锁。Redis事务无法完全满足ACID特性,原子性仅保证命令全执行或全不执行,但不支持回滚;一致性依赖客户端处理;隔离性有限;持久性取决于持久化策略。事务不支持回滚的原因在于设计哲学追求高效简单。执行失败时需根据EXEC返回值判断原因并重试或放弃。与Lua脚本相比
-
调大hash-max-ziplist-entries内存不降反升,因ziplist启用需同时满足entries、value长度及数据紧凑三条件;单个value超hash-max-ziplist-value即退化为hashtable。
-
volatile-ttl是Redis唯一支持按剩余过期时间优先淘汰的策略,仅作用于ttl>0的已设过期键,每次内存不足时淘汰一个最接近到期的key,非批量清理、不主动扫描、不保证全量精确排序。
-
单纯用EXPIRE挡不住缓存击穿,因Redis物理过期会删除key导致并发请求全打到DB;逻辑过期通过value内嵌expireTime时间戳由应用判断数据有效性,配合长TTL防key被清,再用SETNX避免重复更新。
-
布隆过滤器不支持单元素删除,BF.EXISTS返回true时数据可能已不存在,导致缓存穿透;应改用支持CF.DEL的CuckooFilter或定期重建带时间戳的过滤器。
-
RedisCluster非开箱即用高可用方案,需主动设计拓扑、预估槽位、处理跨槽限制;常见连不上因客户端未启集群模式、总线端口未开放、配置用localhost、多key未同槽、全局命令不支持、脚本事务受槽约束、slot缓存更新滞后等。
-
切换RedisPython客户端需同步更新依赖和初始化代码,仅安装新包不生效;redis-py不支持集群,redis-py-cluster已停更,应改用redis-py4.0+的RedisCluster;异步场景下aioredisv1与v2接口不兼容。
-
Redis哨兵模式不支持自动伸缩,其核心能力仅限于监控存活、触发故障转移和提供主节点地址;它不参与节点增删、数据分片或路由更新。
-
ZREVRANGE默认返回member(如商品ID),非score;需加WITHSCORES参数才同时返回member和score,结果为交替格式。