Redis技术文章
-
用 Redis HSCAN 的 cursor 循环渐进读取大型 Hash,解释 COUNT、MATCH、NOVALUES 的边界,以及数据变化时如何用幂等处理降低重复和漏读风险。237 收藏 -
Redis EXPIRE 再次续期会直接替换旧 TTL。本文用会话滑动过期场景解释默认语义,并比较 NX、XX、GT、LT 的使用边界与排查方法。273 收藏 -
Redis TTL 返回 -1 表示键存在但没有过期时间,-2 表示键不存在。本文用命令和 Go 分支示例区分三种状态,并排查普通 SET 覆盖、过期窗口和查询上下文不一致等常见原因。216 收藏 -
用 Redis SET NX EX 原子创建带过期时间的分布式锁,配合唯一 token 和 Lua 原子释放,避免锁永久残留或误删其他实例的新锁。186 收藏 -
Redis Stream 使用 XTRIM MAXLEN ~ 时,阈值是近似目标而不是硬上限,宏节点边界和 LIMIT 都可能让裁剪后保留少量额外消息。本文用 XLEN、XRANGE 解释结果,并给出精确裁剪与 MINID 的选择方法。441 收藏 -
Redis XREADGROUP 使用 BLOCK 参数控制没有新消息时的等待时长:BLOCK 2000 表示最多等待 2 秒,BLOCK 0 表示无限等待;读取待处理消息时使用非 > 的 ID,BLOCK 不会生效。469 收藏 -
介绍 Redis XPENDING 的摘要和扩展查询,查看消费组中按消息 ID 最早的未确认消息,并区分最老 ID与空闲最久的 pending 记录。259 收藏 -
Redis 8.8 的 INCREX 把计数、上限、过期和只在新窗口设置 TTL 组合成一个原子命令。本文用固定窗口限流示例说明如何从简单 Lua 方案迁移,如何读取实际增量,以及哪些多键和滑动窗口场景仍应保留 Lua。131 收藏 -
Redis Lua 返回数组出现 nil,关键在 Lua table、RESP2/RESP3 与客户端解码的多层映射。本文用最小脚本说明 nil 截断、空回复差异和稳定返回契约的修复方法。448 收藏 -
Redis Cluster 中 MULTI 不能直接跨槽位执行。本文解释 hash slot、哈希标签和 MOVED 边界,并给出键设计、事务拆分与上线检查清单。300 收藏 -
Redis 的 LASTSAVE 只能说明最近一次成功写盘时间。本文用 BGSAVE、INFO persistence 和时间戳变化,判断 RDB 快照到底是成功、进行中还是失败。269 收藏 -
Redis AOF 重写时磁盘占用变大,通常不是数据瞬间翻倍,而是旧 AOF、新 base 文件和重写期间新增写入同时存在。本文用 Redis 7 多段 AOF 结构、INFO persistence、du 与 df 命令定位空间峰值,并给出生产容量检查清单。191 收藏 -
Redis 连接池耗尽不等于 Redis 慢。本文用 go-redis PoolStats、SLOWLOG GET 和 CLIENT LIST 区分慢命令、池等待与请求生命周期未结束,并给出修复顺序。378 收藏 -
Redis Pub/Sub 采用至多一次投递,订阅端断线期间消息不会保留。本文用最小命令和排查表说明何时继续用 Pub/Sub,何时切换 Streams 或采用混合方案。363 收藏 -
Redis SCAN 不是并发安全的静态快照:从扫描开始到结束始终存在的键会被完整迭代返回,但扫描期间被删除、新增或重新加入的键可能返回也可能不返回。本文给出重复返回、COUNT、UNLINK 和二次复查的处理方式。323 收藏