news 2026/7/16 4:20:53

日常八股文记录

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
日常八股文记录

Redis Streams是一个仅追加(Append-Only)的持久化消息日志。它不是一个普通的 List(列表)或 Pub/Sub(发布订阅)每条消息进来都会自动生成一个全局唯一的 ID(时间戳+序号),并且消息会持久化在内存(及 RDB/AOF)中,不会因为消费者离线而丢失。

会有一个消费者组,来对Streams进行消费。同一条消息只会被组内的某一个消费者拿到(实现负载均衡)。

// ============================================================ // Redis 配置 // ============================================================ struct RedisConfig { std::string host = "127.0.0.1"; int port = 6379; std::string password = ""; int db = 0; // Streams 配置 std::string streamKey = "device:commands"; std::string consumerGroup = "gateway-group"; std::string consumerName = "gateway-1"; // 启动时动态覆盖 // 连接池配置 int poolSize = 4; // 连接池大小 int connTimeoutMs = 3000; // 连接超时 int cmdTimeoutMs = 5000; // 命令超时 };

除此之外,还有一个极其重要的隐藏概念:PEL(Pending Entries List,待处理列表)。当消费者取走一条消息但还没回复XACK(确认)时,这条消息就挂在 PEL 里。这是 Redis Streams保证消息不丢失的基石。

可能问题:配置里有cmdTimeoutMs = 5000。如果你为了实时性,采用XREADGROUP BLOCK 0(永久阻塞等待新消息),该命令在收到下一条消息前,会一直阻塞住这条 TCP 连接。如果客户端的底层cmdTimeoutMs设置为 5 秒,那么每隔 5 秒这个阻塞命令就会因超时而断开,网关就会频繁重连,产生大量XGROUP重入日志。
解决方案:对于阻塞读命令,必须单独设置为无限超时(-1),或者采用短轮询(如BLOCK 1000超时重试)。

consumerName绝对不能重复

PEL 无限膨胀
如果网关处理设备命令时异常崩溃,没有来得及执行XACK,这些消息就会永远卡在 PEL 里。随着时间推移,PEL 会越来越大,导致XPENDING命令变慢,甚至撑爆 Redis 内存。
补救措施:启动一个后台定时任务,扫描XPENDING超时(如处理超过 30 秒)的消息,执行XCLAIM(认领)并重新处理,或者直接XACK并记录失败日志。

在分布式中,redis的数据库一共16个,但是只能使用db=0的那一个,暂时还不支持

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/16 4:19:00

意图识别 vs API 缓存 —— 哪种方法更省 Token?

团队每天花 255.6 元(Qwen3.6 Flash)或 426 元(Qwen3.6 Plus)在 LLM 调用上,想降本。有人说"用 API 缓存吧,90% 折扣",有人说"先做意图识别,85% 的请求不用调 LLM&qu…

作者头像 李华
网站建设 2026/7/16 4:18:24

C语言编程入门:数值比较、字母转换与阶乘计算实战解析

1. 项目概述:从三个小程序窥见C语言的编程逻辑最近在带几个刚入门C语言的朋友做练习,发现很多新手在学完基础语法后,面对“写一个完整程序”的任务依然会感到无从下手。他们不缺零散的知识点,缺的是将这些知识点串联起来解决实际问…

作者头像 李华
网站建设 2026/7/16 4:18:16

C/C++日期算法实战:从闰年判断到蔡勒公式的完整解析

1. 项目概述:为什么C/C日期算法是面试与实战的“硬骨头”干了这么多年C/C开发,也面过不少人,我发现一个挺有意思的现象:很多朋友对指针、内存管理、数据结构这些“大块头”谈起来头头是道,但一碰到日期时间相关的算法问…

作者头像 李华
网站建设 2026/7/16 4:17:42

Kubernetes源码编译安装实战:Ubuntu 24.04下k8s编译安装最佳实践

1. 项目概述:为什么“k8s编译安装”不是入门第一步,而是进阶者的分水岭“k8s编译安装最佳实践”——这八个字背后藏着一个被严重低估的真相:它根本不是给刚学完kubectl get nodes的新手准备的,而是专为那些已经用过kubeadm init三…

作者头像 李华
网站建设 2026/7/16 4:17:39

InnoSwitch3-MX芯片与45W多输出电源设计解析

1. InnoSwitch3-MX芯片特性解析这款来自Power Integrations的离线反激式开关电源IC,集成了多项业界领先的技术特性。其核心在于将650V MOSFET、同步整流控制器和FluxLink反馈技术集成在单个表面贴装封装中。FluxLink技术是该芯片的灵魂所在,它通过磁感耦…

作者头像 李华