avatar
文章
377
标签
447
分类
12
首页
留言板
知识库
归档
标签
分类
关于
Dai Wei
搜索
首页
留言板
知识库
归档
标签
分类
关于

Dai Wei

如何基于Redis实现消息队列?
发表于2021-05-15|数据库
Stream 让 Redis 具备可 ACK 的消息语义,适合轻量异步任务,但不等同于 Kafka 级日志系统。 核心命令XADD 写入;XREAD/XREADGROUP 消费;XACK 确认;XPENDING 查未 ack;XCLAIM 转移超时消息。 123XADD orders * type created id 1001XGROUP CREATE orders cg1 $ MKSTREAMXREADGROUP GROUP cg1 c1 COUNT 10 STREAMS orders > 与 List 队列差异支持消费组、持久化消息 ID、pending 列表与范围查询,更适合多消费者竞争与重试。 实践建议设置 MAXLEN 近似裁剪防无限增长;业务幂等;监控 lag 与 pending 数。 与 Pub/Sub 区别Pub/Sub 无持久、无消费组;Stream 可持久、可回溯。广播用 Pub/Sub,任务队列用 Stream。 消费者崩溃恢复XPENDING + XCLAIM 重新分配 idle 消息;设置 min-i...
Redis为什么用跳表实现有序集合
发表于2021-05-06|数据库
Sorted Set 需要有序+范围查询+动态更新,跳表在实现复杂度与性能之间取得了平衡。 为什么不用红黑树跳表实现更简单,范围查询更直观(链表层级),并发扩展友好;与哈希表组合实现 O(logN) 插入与 O(1) 单 member 查找。 结构直觉多层索引链表,查找时从顶层开始「跳跃」,平均 O(logN)。Redis 实现带 span 便于 rank 查询。 与 ziplist/listpack小集合仍可用紧凑编码省内存;超过阈值转跳表+dict。 对比其他结构 结构 范围查询 实现难度 跳表 优秀 中 红黑树 中 高 数组 差 低 随机层概率Redis 跳表层高 p=0.25;期望层数 O(logN)。手写跳表是很好算法练习。 范围查询复杂度ZRANGEBYSCORE O(logN+M),M 为结果数;大数据量分页用 LIMIT 游标。 实践复习清单跳表期望复杂度;与红黑树对比;ZSet 底层双结构;score 相同 tie-break;ZRANGE 分页;手写跳表练习。 常见坑 面试只背「ZSet 用跳表」说不出与 dict...
Redis常见面试题总结(上)
发表于2021-04-26|数据库
Redis「单线程」是经典考点,但 4.0 后已有 IO 线程与 6.0 多线程 IO。准确表述比背口号更重要。 为何说单线程也快纯内存、高效数据结构、IO 多路复用(epoll/kqueue)、避免上下文切换与锁竞争。命令执行仍主线程串行,保证简单性。 6.0+ 多线程 IO网络读写可线程池并行,命令执行仍在主线程。适合大 value 高带宽场景,需 io-threads 调优。 常见面试点 持久化方式与选型 过期删除:惰性+定期 内存淘汰策略 LRU/LFU/TTL 主从复制:全量+增量 PSYNC 实践建议用 redis-benchmark 只作相对参考;真实压测带业务 payload 与 pipeline。 事件循环细节aeEventLoop 处理 readable/writable;beforeSleep 做 fast expire、异步关闭。了解即可,面试点到为止。 事务与 LuaMULTI/EXEC 非 rollback 语义;Lua 脚本原子执行,注意脚本时长。 实践复习清单单线程+IO 线程表述;过期策略;...
Redis持久化机制详解
发表于2021-04-17|数据库
持久化是在性能与数据安全之间做选择。缓存场景可以弱持久,Redis 作主存储则必须严肃配置。 RDB周期性 fork 子进程写快照;恢复快、文件紧凑;可能丢失最后一次快照后的数据。save 规则如 save 900 1。 AOF记录写命令,everysec/always/no 三档 fsync。rewrite 压缩体积;恢复慢于 RDB。 混合持久化(4.0+)AOF 重写时嵌入 RDB 前缀,兼顾恢复速度与增量完整度,生产推荐开启 aof-use-rdb-preamble yes。 123appendonly yesappendfsync everysecauto-aof-rewrite-percentage 100 实践建议主从+哨兵/集群保证高可用;备份 RDB 到对象存储;演练 restore。 磁盘与 AOFAOF 文件过大触发 rewrite;rewrite 期间积压 buffer。SSD 与 noatime 挂载推荐。 灾备 RPO/RTOeverysec 可能丢 1 秒;always 最安全但慢。 实践复习清单AOF ...
Redis内存碎片详解
发表于2021-04-08|数据库
used_memory 不高却触发 maxmemory,可能是碎片率在作怪。理解分配器行为才能对症调参。 碎片从哪来频繁更新不同大小 value、大量过期删除留下「瑞士奶酪」式空闲块;jemalloc 不一定会立刻归还 OS。 如何观察12INFO memory# mem_fragmentation_ratio = used_memory_rss / used_memory 比例持续 >1.5 且 RSS 明显高于 logical 需关注。 治理手段 4.0+ activedefrag yes 在线整理(CPU 开销)。 重启实例(维护窗口)。 避免大量小对象频繁变长;大 value 压缩或拆分。 实践建议设置合理 maxmemory-policy;监控 fragmentation;版本升级关注 listpack 等内存优化。 复制与内存主从全量同步时副本也会 fork;碎片高时同步更慢。尽量低峰 restart 或 active defrag。 大 key 迁移DUMP/RESTORE 或 双写切换,避免 BLOCK 线上。 实践复习清单mem_frag...
如何基于Redis实现延时任务?
发表于2021-03-29|数据库
延迟任务要同时满足「到时触发」与「至少一次执行」。Redis 提供多种轻量实现,但可靠性与精确度不同。 方案对比 方案 原理 优点 缺点 ZSet score=执行时间 简单 单点需抢任务 Keyspace 过期 过期事件通知 省结构 不保证触发、易丢 Redisson DelayQueue 内部队列 封装好 依赖组件 Stream 定时扫描+消费组 可 ACK 需调度器 12ZADD delay:tasks 1735689600000 "order:1001"# 轮询 ZRANGEBYSCORE 取到期任务,Lua 原子 ZREM 防重复 实践建议执行端幂等;任务状态机落 DB;多实例用 Lua/Redlock 抢任务;监控 pending 堆积。 与 MQ 分工短延迟、量不大用 Redis;长延迟、堆积、审计要求用 RocketMQ 定时/延迟消息。 时钟依赖多机 NTP 同步;延迟队列比较的是 Redis 所在机器时间。 实践复习清单ZSet 延迟队列 Lua 原子;幂等消费;pending ...
Redis 3 种特殊数据类型详解
发表于2021-03-20|数据库
三种特殊类型在签到、UV 统计与 LBS 场景非常省内存,但语义与误差要事先接受。 Bitmap位数组,SETBIT/GETBIT/BITCOUNT。适合日活签到、布尔特征压缩。注意偏移过大稀疏时仍占上限内存。 12SETBIT sign:202609:uid1001 2 1BITCOUNT sign:202609:uid1001 HyperLogLog基数估计,标准误差约 0.81%,PFADD/PFCOUNT 极省内存。不适合需要精确去重或单成员查询。 GEO基于 Sorted Set 的经纬度,GEORADIUS 查附近。地球半径计算有固定误差,高精度地图仍用专业引擎。 Stream(补充)消息流+XGROUP 消费组,可替代简单 List 队列,支持 ACK 与 pending 列表。 Bloom 模块RedisBloom 模块提供 scalable bloom;与纯 Bitmap 方案对比内存与误判率。 时序数据TS 模块或直接用 ZSet/TStream 自建;注意 retention。 实践复习清单Bitmap 签到键设...
Redis 5 种基本数据类型详解
发表于2021-03-10|数据库
选对数据结构等于选对时间复杂度。五种基础类型覆盖大部分业务缓存与计数场景。 String二进制安全字符串,可存 JSON、计数、分布式锁(SET NX EX)。INCR 原子计数;GETSET 可用于简单轮换。 List双端链表,LPUSH/RPOP 做队列;注意中间查找 O(n),长列表慎用。 Hash字段级更新,适合对象缓存(用户 profile)。小 hash 用 ziplist/listpack 省内存。 Set去重集合,SADD/SISMEMBER O(1);交集可用于共同好友。 Sorted Set带 score 有序集合,排行榜、延迟队列(score=时间戳)。底层跳表+哈希表。 12ZADD rank 980 user:1001ZRANGE rank 0 9 WITHSCORES REV 编码转换阈值ziplist/listpack 与 hashtable 转换阈值由配置项控制;升级版本阈值变化可能导致内存突增。 管道 pipeline批量命令减少 RTT;注意非事务场景下部分失败的处理。 实践复习清单五类型...
Redis常见阻塞原因总结
发表于2021-03-01|数据库
Redis 单线程执行命令,一条慢操作会拖住全局。阻塞排查要同时看命令、持久化、复制与 big key。 常见阻塞源 慢命令:KEYS、FLUSHALL、大集合 SUNION、无 LIMIT 的 LRANGE。 持久化:RDB fork 导致 COW 内存压力;AOF rewrite 子进程 IO。 主从全量同步:生成 RDB 期间 buffer 堆积。 big key 删除/过期:4.0+ 可用 UNLINK 异步释放。 集群/网络:阻塞在 IO 多路复用之外的系统调用较少,但磁盘 AOF 同步写会放大延迟。 排查工具1234redis-cli SLOWLOG GET 10redis-cli --latencyredis-cli --bigkeysINFO persistence 实践建议生产禁用 KEYS;用 SCAN 迭代;AOF 用 everysec;监控 latest_fork_usec。 内核透明大页 THPRedis 官方建议 disable THP,否则 latency 尖刺。sysctl vm.overcommit_memory&#x...
缓存基础常见面试题总结
发表于2021-02-20|数据库
引入缓存的第一课不是性能提升多少,而是故障模式下系统还能不能扛住。 三大经典问题 穿透:查不存在的数据,缓存与 DB 都被打穿 → 布隆过滤器/空值缓存/参数校验。 击穿:热点 key 过期瞬间并发打 DB → 互斥重建/逻辑过期/永不过期+异步刷新。 雪崩:大量 key 同时过期或 Redis 宕机 → 过期时间加随机、集群高可用、限流降级。 一致性问题双写顺序、删缓存时机、延迟双删、订阅 binlog 异步删缓存。以 DB 为准,接受短暂 stale。 123456# 伪代码:互斥重建if cache_miss: if lock.acquire(key): load_from_db() set_cache() lock.release() 实践建议监控 cache hit ratio、慢查询与 Redis CPU;核心链路压测验证击穿策略。 热点 key 探测Redis 4.0+ hotkeys 或客户端采样;大促前预热。限流降级模板:sentinel/hystrix 风...
1…192021…38
avatar
Dai Wei
软件开发者,记录技术探索与实践
文章
377
标签
447
分类
12
Follow Me
公告
分享软件开发、工程实践与持续学习中的思考。
最新文章
Trae + MiniMax 多场景实战:Redis 故障排查与跨语言重构2026-08-28
Kimi K3 实战:全栈项目、Java 项目改造与 3A 游戏 Demo2026-08-23
测试开发学习路线(2026 最新版):AI 时代如何从测试走向质量工程2026-08-20
IDEA + Qoder 插件多场景实战:接口优化与代码重构2026-08-18
DeepSeek V4 + Claude Code 实战:代码能力深度测评2026-08-14
分类
  • AI 编程28
  • Java103
  • 人工智能39
  • 分布式系统26
  • 学习路线5
  • 开发工具11
  • 数据库42
  • 系统设计26
标签
线程优先级 DBMS 大模型 Java基础 命令 Top K 安全 Loop 计算机网络 Raft 贪心 修饰权限 TCC 最终一致性 召回 网络编程三要素 服务调用 分布式理论 知识体系 复杂度 红黑树 Unsafe 面试 Java26 BASE 内存管理 语音 redo log Kimi NoSQL Seata CAS 优化器 RDB 线程通信 面试题 IDE 死锁 ZAB 编排
归档
  • 八月 2026 7
  • 七月 2026 7
  • 六月 2026 6
  • 五月 2026 7
  • 四月 2026 6
  • 三月 2026 4
  • 二月 2026 5
  • 一月 2026 5
网站信息
文章数目 :
377
本站访客数 :
本站总浏览量 :
最后更新时间 :
© 2017 - 2026 By Dai Wei框架 Hexo 8.1.2|主题 Butterfly 5.7.0
搜索
数据加载中