-
从节点默认不执行任何过期逻辑,仅重放主节点发来的DEL等命令;必须设maxmemory-policy为noeviction(或7.0+启用replica-ignore-maxmemoryyes)防止主动淘汰破坏一致性。396 收藏 -
RedisStreams用XADD存操作日志最直接,天然按毫秒级时间戳排序,支持XREAD/XRANGE按时间范围查询,需设MAXLEN防爆涨,多服务通过consumergroup共享且互不干扰,持久化依赖AOF配置。395 收藏 -
noeviction是金融级系统唯一可接受的内存策略,它通过写入失败显式暴露容量瓶颈,杜绝后台自动删数据;淘汰策略属兜底补救,非容量规划手段,须配合85%阈值告警、自动化扩容及OOM错误处理闭环。395 收藏 -
RedisString底层使用SDS而非C字符串,具备O(1)长度获取、二进制安全等特性;其内存布局含sdshdr头(因类型不同为4/6字节)与数据,小字符串存在固定开销;扩容采用几何增长策略易造成内存浪费;≤44字节时启用embstr编码以节省内存和指针跳转开销。394 收藏 -
哨兵节点启用密码认证但未提供密码导致SENTINELmaster报NOAUTH错误;需在sentinel.conf中配置sentinelauth-pass,并手动auth;注意端口、master-name一致性及flags等字段含义。393 收藏 -
直接用SETNX易误删锁,因加锁与设过期非原子操作,且释放锁未校验线程标识;正确做法是SET+NX+EX原子加锁并用Lua脚本校验值后删除。393 收藏 -
直接用LPOP或LRANGE处理大列表会阻塞,因其时间复杂度为O(N),在单线程Redis中长时间占用CPU,导致后续请求排队、超时及连接池耗尽。393 收藏 -
SETNX不能单独用作分布式锁,因其无法原子性地设置值和过期时间,易导致死锁;必须用SETkeyvalueNXEXseconds原子命令,并配合唯一value和Lua脚本校验解锁。392 收藏 -
HSET查单个字段更快,SET写整条数据更省网络;字段少且固定用HSET,动态多变或需原子替换用SET;LIST队列易丢消息,推荐STREAM;ZSET排行榜慎用浮点score;大SET内存开销大,慎用SMEMBERS。392 收藏 -
HMSET自Redis6.2起被弃用,应统一使用HSET:支持批量写入、返回实际修改数、空值字段会被删除;需注意原子性(单次多字段更新)、客户端传参规范(推荐mapping=)及代理字段数限制。392 收藏 -
Redis键空间事件默认关闭,需配置notify-keyspace-events为KEA等组合才生效;事件频道名格式严格、无历史回放、过期事件延迟不可靠、断连事件丢失且无自动续订。386 收藏 -
单纯靠TTL随机化不能根治缓存雪崩,但它是成本最低、见效最快的前置防线——关键在于“错开”而非“随机”,且必须配合过期时间分级和热点识别。386 收藏 -
RedisLua脚本中不能直接执行SET等命令,必须通过redis.call()或redis.pcall()调用;MULTI/EXEC等事务命令禁用;所有key需显式传入,集群下须同slot;返回值类型需手动判断,避免误判false/0。385 收藏 -
RedisStream比PUB/SUB更适合做持久化队列,因其支持消息持久化、消费者组、ACK机制、唯一消息ID和按位置回溯;PUB/SUB纯内存广播,无存储、无堆积能力。384 收藏 -
ConnectionTimeoutException通常是Lettuce客户端连接池新建连接超时所致,主因是网络、DNS、地址配置或防火墙问题,而非Redis故障;其默认connectTimeout为30秒,生产建议设为3~5秒。382 收藏