Redis技术文章
-
Redis 7 之后可以把 Lua 逻辑注册为函数,再用 FCALL 按函数名调用。本文从一个原子更新场景出发,拆清 numkeys、KEYS、ARGV、FCALL_RO 和集群迁移的边界。460 收藏 -
Redis 报 OOM 不一定是 used_memory 超过 maxmemory。本文从 maxmemory 判定、内存碎片率、客户端输出缓冲和大 key 四个方向核对真实占用,并给出可复现的 redis-cli 检查命令。460 收藏 -
Redis 缓存键如果使用相同 TTL,批量写入后可能在同一时间段集中失效。本文用 Go 示例演示如何加入可控随机抖动,并区分首次回填、刷新和热点保护。460 收藏 -
讲清 Redis BLMOVE 如何把待处理任务原子移入备份列表,并结合确认删除、可见性超时、领取令牌和幂等处理避免任务丢失。460 收藏 -
Redis 8.6 新增 HOTKEYS,可以在指定采样窗口内按 CPU 或网络指标找出高频访问键。本文从缓存延迟升高的现场出发,演示 HOTKEYS START、GET、STOP 的最小用法,解释 COUNT、DURATION、SAMPLE 与 SLOTS 的边界,并给出集群分片、误判和上线验收清单。456 收藏 -
EXPIRE 只能让整个 Redis Hash key 过期,不能单独淘汰某个 field。Redis 7.4.0 起可用 HEXPIRE、HPEXPIRE 设置字段级 TTL;旧版本则应按生命周期拆分 key。456 收藏 -
Redis Functions 升级最容易混淆的是 library name、function name 和 Lua 脚本 SHA1。本文用整库替换、脚本兼容窗口和升级检查表,说明如何保持业务调用名稳定。455 收藏 -
Redis UNLINK 只会先把 key 从键空间摘除,真正的对象释放在后台异步完成。本文用 lazyfree 队列、used_memory、RSS 和 MEMORY STATS 建立删除大键后的内存回收判断方法。454 收藏 -
Redis 分布式锁续期失败时,不能只看异常或单独读取 TTL。本文用唯一令牌、原子脚本和 PTTL 区分锁仍由本客户端持有、已被接管与状态未知,并说明安全释放和业务栅栏边界。451 收藏 -
Redis SETNX 只能完成抢锁,不能单独保证安全释放。本文用订单超时任务拆解误删他人锁的竞态,给出带随机令牌的加锁、续期边界与 Lua 原子释放脚本,并用可复查的命令验收。450 收藏 -
Redis 7.4 的 HEXPIRE 可以只给 Hash 中指定字段设置过期时间,适合拆分会话或临时属性的生命周期。本文用 HSET、HEXPIRE、HPTTL 和 HGETALL 核对 FIELDS 参数、返回值、版本边界与常见误区。450 收藏 -
Redis List 用 BRPOP 做任务队列时,Worker 取走任务后宕机会让任务直接消失。更稳的做法是先用 LMOVE 转到处理中队列,业务成功后再 LREM 确认。449 收藏 -
Redis Lua 脚本接收 ARGV 时,tonumber 可能因为空字符串、非数字或参数位置错误返回 nil,后续计算就会报错或走错分支。本文用一个库存扣减脚本拆开参数校验、默认值边界和线上验收方法。449 收藏 -
本文用 Redis Vector Sets 组织向量、元素标识和轻量属性,说明如何用 VADD、VSIM、FILTER、COUNT 与 FILTER-EF 设计可解释的相似度查询结果。449 收藏 -
Redis Lua 返回数组出现 nil,关键在 Lua table、RESP2/RESP3 与客户端解码的多层映射。本文用最小脚本说明 nil 截断、空回复差异和稳定返回契约的修复方法。448 收藏