Redis技术文章
-
活动报名、接口去重、用户访问统计里经常会用 Redis Set。本文从“页面显示人数不对”的现场开始,逐步验证 SADD 返回值、SCARD 数量、Key 粒度和过期策略,整理一套更稳的 Set 去重写法。194 收藏 -
Redis主从读写分离需客户端显式控制,服务端仅同步数据;可通过API探测节点角色、配置双连接池或使用Lettuce的ReadFrom.SLAVE_PREFERRED实现路由,同时须校验从节点只读模式、健康状态与复制延迟。191 收藏 -
必须配合日期动态生成key,因Bitmap无时间维度,共用key会丢失日期信息且导致单key膨胀、RDB/AOF暴增、主从延迟;用户ID须映射为非负整数offset,避免直接强转;BITCOUNT偏高多因key未清理或offset错位;5000万DAU下Bitmap体积约6.25MB,但需防ID稀疏浪费内存。191 收藏 -
INFOkeyspace无法反映淘汰情况,因其仅统计存活key数量,不区分已过期未删除或已被淘汰的key,且不记录evicted_keys等关键淘汰指标。191 收藏 -
LPUSH+LPOP无法自动限长,因LPOP删队首而新元素入队尾,导致长度持续增长;唯一可靠方式是LPUSH后立即LTRIM,或用Lua脚本原子执行推入与截断。187 收藏 -
数据库 · Redis | 3星期前 | Redis · 消息队列 · Stream · 消费组 · redis 消息队列 Redis Stream 消费组 XREADGROUP XACK XPENDING XAUTOCLAIM
用订单异步处理场景讲清楚 Redis Stream 的实用队列模型:生产者写入消息,消费组分配任务,Worker 处理成功后 ACK,失败或超时的消息进入待确认列表,再通过 XPENDING 和 XAUTOCLAIM 做重投。187 收藏 -
Redis自动RDB备份不能仅用crontab调用bgsave,因BGSAVE异步返回OK不保证写入完成,需校验rdb_last_save_time和文件非空,并动态获取路径、加超时、轮转清理。186 收藏 -
AOF重写后文件变大是因为重写时仍会写入带过期时间但尚未过期的key,尤其高频短TTL的SET/EXPIREAT等指令堆积且无法压缩,导致AOF体积膨胀。186 收藏 -
Redis内存飙升多因bigkey,应优先在从节点用redis-cli--bigkeys扫描,避免主节点阻塞;它仅返回每类最大key且不反映真实内存,需结合MEMORYUSAGE和访问频次进一步分析。185 收藏 -
RedisLua脚本中不能直接执行SET等命令,必须通过redis.call()或redis.pcall()调用;MULTI/EXEC等事务命令禁用;所有key需显式传入,集群下须同slot;返回值类型需手动判断,避免误判false/0。185 收藏 -
ZADD的score不能用时间戳,因同分排序不稳定且时间戳递增违背“分数越高名次越靠前”逻辑;应使用业务分数(如积分)并利用ZADD覆盖更新、ZINCRBY原子累加、ZREM安全删除。183 收藏 -
RedisPub/Sub不适合异步任务处理,因其无确认机制、无持久化、不支持消费者组与积压缓冲;应选用LPUSH+BRPOP或XADD+XREADGROUP(Stream)实现可靠任务队列。183 收藏 -
短连接在Redis中严重伤性能,因其每次需完整TCP握手、认证、DB切换与释放,局域网下单次开销达1–3ms,超GET命令5–10倍,并引发TIME_WAIT端口耗尽。181 收藏 -
主从同步突然变成全量复制,大概率因从节点偏移量超出主节点复制积压缓冲区范围;可通过inforeplication比对master_repl_offset、repl_backlog_first_byte_offset和repl_backlog_size判断是否缓冲区循环覆盖,再结合run_id是否变更、是否首次连接等排查。181 收藏 -
数据库 · Redis | 1星期前 | Redis · 缓存治理 · Keyspace Notifications · 过期事件 · redis Pub/Sub Keyspace Notifications 过期事件 缓存监听 补偿任务
本文用 Redis Keyspace Notifications 演示如何监听过期 Key,配置 notify-keyspace-events,接收 __keyevent@0__:expired 事件,并说明事件通知的丢失风险与补扫兜底做法。181 收藏