Redis能做消息队列吗?三种实现方案与可靠性边界全解析
最近在技术群里看到一位朋友吐槽说某大厂二面被问到一个看起来人畜无害的问题“Redis 能做消息队列吗怎么实现”他条件反射答了一句“能用 ListLPUSH 配 BRPOP”结果面试官就像连珠炮一样追问消息消费失败怎么办消费者掉线了消息会不会丢堆积了怎么办跟 Kafka 比这里为什么不用 Kafka他当场就有点顶不住。这个场景太常见了。我决定把这道题彻底拆一遍——Redis 到底能不能做消息队列能的话应该怎么实现以及为什么有人说用它扛过上亿消息也有人在深夜被它坑到紧急扩容。这篇文章既是技术复盘也可以直接当系统设计面试的参考材料。提前给结论Redis 能做消息队列但“能做”的前提是你必须清楚自己要的是哪一种队列语义。1. 先破题你对“消息队列”的预期决定了 Redis 能不能用1.1 消息队列的三个语义层次入队出队、广播、消费组聊 Redis 之前得先把“消息队列”这四个字拆开。业务眼里它是一个东西技术人眼里它至少包含三种不同语义。第一个层次是先进先出队列。生产方往队尾塞消息消费方从队头取消息谁取走就是谁的A 拿走了 B 就拿不到。这个语义最朴素也是绝大多数人脑子里第一个画面。第二个层次是发布订阅。生产方把消息发到一个频道上所有订阅了这个频道的客户端都会各自收到一份。注意这里没有“竞争”的概念谁都能拿到一份完整拷贝。第三个层次是消费组模型。一组消费者共同处理同一个消息流每条消息只投递给组内其中一个消费者消息处理完要显式确认确认不了就重新投递。这个模型才是现代消息中间件里说的“可靠队列”。现在再把 Redis 的东西往这套语义里摆List 只能做到第一个层次Pub/Sub 是第二个层次Stream 才基本摸到第三个层次的门槛。所以“Redis 能不能做消息队列”根本没有一个“能”或“不能”的固定答案只有“你要求的队列是哪种严格程度的队列”。1.2 面试官为什么爱把这题放在二面二面问技术题一般不是背 API而是考察系统设计能力。消息队列要解决的核心问题其实非常固定数据不丢、不重、不乱序、消费者水平扩展、生产消费速度解耦。面试官想听的是你对这些问题的理解而不是你记住了几个命令。你脱口而出“LPUSH BRPOP”只代表你见过最基本的用法。只有当你能顺着“入队出队 → 广播 → 消费组 → ACK → 堆积 → 持久化”这条线把 Redis 的三种方案各缺哪块、怎么补、补完还有什么代价讲清楚面试官才会觉得你是在生产环境里真刀真枪思考过。所以后面的章节就按“List → Pub/Sub → Stream”的顺序把三条路全部走一遍最后落到选型边界。这样无论面试官从哪个点追问你手里都有东西可以兜底。2. List 实现最朴素的队列撑起过很多真实业务2.1 基础版LPUSH BRPOP 的黄金配比先看最基础版本。用 List 做队列左侧入队右侧出队# 生产者 LPUSH queue:order order:1001 LPUSH queue:order order:1002 # 消费者阻塞获取 BRPOP queue:order 5BRPOP 是阻塞版本的 RPOP后面那个 5 是阻塞超时秒数。如果没有消息客户端最多等 5 秒后返回空有消息时立刻返回延迟可以做到毫秒级。它比写一个定时任务轮询 RPOP 省太多事了——轮询做不好就是无效请求和延迟双高。这里有个很多人不知道的细节BRPOP 支持一次传入多个 key例如BRPOP queue:A queue:B queue:C 5。Redis 会优先读取 key 列表靠前的队列前一个一直没有消息才会去看后面的。这个特性天然适合做优先级拆分比如普通任务队列和高优先级任务队列各放一个 key。写到这里很多刚入行的人觉得自己已经会了但面试官最想听的其实是下一节消息弹出之后怎么办。2.2 可靠性缺口Redis 只知道“弹出”不知道“处理成功”List 方案最大的问题是语义上只有“弹出”没有“确认”。BRPOP 把消息取出来之后它就已经离开了队列。如果业务逻辑又抛了个异常这条消息就谁都找不到了要是进程直接崩溃处理到一半的消息干脆人间蒸发。一个常见的补救方案是引入“处理中”队列。消费者 BRPOP 工作队列后先把消息 LPUSH 到一个 backup 列表再执行业务逻辑成功之后从 backup 里 LREM 移除失败则重新塞回工作队列。while True: msg redis.brpop(queue:work, timeout5) if not msg: continue redis.lpush(queue:processing, msg) try: handle(msg) redis.lrem(queue:processing, 1, msg) except Exception: redis.lpush(queue:work, msg)这样处理中消息就有了第二道保险。但注意 LREM 是按值删除如果同一条消息被重复入队用 LREM 容易误删。正确的做法是给消息带上唯一 ID在 processing 列表里存 ID 而不是消息全量这样即使有重复内容也不会删错。配合 Redis 主从复制和 AOF 持久化宕机后的恢复窗口里还能抢救一部分消息。但必须清醒这套方案本质是靠业务代码模拟 ACK 机制不是 Redis 原生能力复杂度全压在你自己身上。2.3 用 Sorted Set 补一个延迟队列List 本身只能做立即分发。业务里经常遇到“下单 30 分钟未支付自动关闭”“超时 5 分钟自动退款”这类的延迟任务这时候 List 就无能为力了。但你可以借助 Sorted Set用 score 存延迟时间戳再做轮询把到期任务捞回来# 延迟 30 分钟后执行 ZADD delay_queue (当前时间戳 1800) order:1001 # 后台轮询 ZRANGEBYSCORE delay_queue -inf 当前时间戳 # 取出后 ZREM再 LPUSH 到工作队列这条链路是我在很多项目里实际用过的简单、直观、够用。它最大的问题是在延迟任务量很大的场景下ZRANGEBYSCORE的频繁轮询会带来额外的 CPU 开销需要自己控制轮询频率和分片粒度。它是“能用”的方案但不是“大规模高性能”的方案。3. Pub/Sub 不是消息队列而是广播器3.1 从“抢消息”到“抄送消息”很多人把 Pub/Sub 也算作 Redis 消息队列的实现方案但严格来说它是另一个物种。Pub/Sub 的核心是频道发布者把消息推到一个频道上所有订阅者同时收到一份不存在抢消息、竞争的语义。# 订阅端 SUBSCRIBE channel:order # 发布端 PUBLISH channel:order order:1001用法和广播一样订阅者连在频道上命令一执行就立刻收到消息延迟极低。它和 List 最大的区别在于信息没有被“弹出去”而是每个订阅者都各自收到一份独立拷贝消费者数量不影响消息可见性。3.2 三个致命短板不持久、不堆积、离线即丢Pub/Sub 做可靠队列有三个硬伤刚入门的同学特别喜欢忽略。第一消息不落盘。Redis 进程一旦重启频道上曾经发过的消息全部消失没有任何恢复渠道。第二消费者不在线就等于没订阅。你不在线期间发出的消息不会被保存上线之后也不会重推错过就是错过。第三慢消费者会拖垮整个实例。每个订阅客户端都有自己的输出缓冲区如果某个客户端消费能力跟不上它的缓冲区会越积越大主线程处理 PING、PUBLISH 都可能被拖慢一个慢客户端就可能成为整个 Redis 实例阻塞的导火索。这里分享一个真实踩坑案例。某团队用 Pub/Sub 做配置中心的变更通知业务上没出事是因为客户端收到通知后还会主动去数据库拉一次最新配置。通知只是“触发一下”真正可靠的逻辑在客户端自己手里。这种组合是 Pub/Sub 的正确打开方式——通知丢了没关系客户端下一次心跳时再拉一次配置就行。3.3 Pub/Sub 的实际价值在线通知、即时广播不能因为不持久就全盘否定它。Pub/Sub 对实时性要求高、允许丢消息的场景非常顺手在线聊天室的上下线提醒、系统内事件的全端广播、配置变更触发信号这些场景消息生命周期极短消费者在线就消费不在线就算了根本没人在意丢不丢。判断标准就一条消息发出去一分钟内没被消费还会不会有人关心如果不会Pub/Sub 是最划算的选择。4. Stream 上线后Redis 才真正拥有一套“能确认的队列”4.1 Stream 是什么日志结构与消息 IDRedis 5.0 引入的 Stream从根本上改变了 Redis 做消息队列的姿势。它是一个追加式日志结构每条消息都有一个自增 ID默认由 Redis 用毫秒时间戳加序号生成比如1700000000000-1。ID 的存在意味着消息天然有序也意味着消息可以从任意位置重新读取# 生产 XADD queue:order * order_id 1001 user_id 88 # 普通读取从 ID0 开始 XREAD COUNT 10 STREAMS queue:order 0消息只要不被 XDEL 手动删除就会一直躺在 Stream 里。这个设计的核心思路和 List 完全相反你不是把消息从队列里“弹”出去而是从日志里“拉”走一段数据消费进度由消费者自己记录。所以 Redis 不需要承担“弹出后弄丢”的责任。4.2 消费组让“多消费者协作”变成可能Stream 的杀手锏是消费者组consumer group。一个组里的多个消费者共同消费同一个 Stream每条消息只会投递给组内其中一个消费者# 创建消费组0 表示从头消费 XGROUP CREATE queue:order group1 0 MKSTREAM # 组内消费者读取 表示只读未投递过的消息 XREADGROUP GROUP group1 consumer-a COUNT 1 STREAMS queue:order # 业务处理完后确认 XACK queue:order group1 1700000000000-1消息投递给某个消费者后会进入该消费者名下的一串待确认列表也就是 PELPending Entries List。消费者处理完调用 XACK消息才会从待确认列表里移除。如果一个消费者处理到一半挂掉了PEL 里那条消息就会变成“空闲超时”条目另一个消费者可以把它认领过来重新处理。到这里Redis 的队列语义已经非常接近专业消息队列的“至少一次投递”模型。注意我特意强调“至少一次”因为 XACK 只保证消息已处理不保证幂等。业务代码里如果不对重复消息做防御XCLAIM 重投之后就有可能出现重复消费。4.3 XPENDING 与 XINFO故障排查三件套实操里最实用的排查命令是XPENDING、XAUTOCLAIM和XINFO。XPENDING 负责查看 PEL 概要信息当前有多少条未确认、各个消费者各占多少条、最早未确认消息已经悬挂多久了。测出某组积压了几百条未确认基本可以断定有消费者实例已经死了或卡死了。XINFO 可以查看 Stream 的长度、消费组数量、每个消费者的状态。XINFO 和 XPENDING 配合就能定位积压是在“生产端没人投递”还是“消费端有人卡死”。XAUTOCLAIM 是 Redis 6.2 增强的认领命令比老式 XCLAIM 更好用一条命令就能把空闲超时的未确认消息批量认领到健康消费者XPENDING queue:order group1 XAUTOCLAIM queue:order group1 consumer-b 6000 0-0 COUNT 10这条命令的意思是把queue:order的 group1 中空闲超过 6000 毫秒的消息交给 consumer-b 处理。后面那个0-0是一个游标配合 COUNT 可以做分批拉取。4.4 用 Stream 不等于能用好 Stream限制与误区Stream 也不是万能药。首先它依赖 Redis 内存过日子。打开 RDB 和 AOF 只是提高重启恢复的概率并不能避免磁盘写满、内存爆掉这类物理限制。其次Stream 消息不会自动清理消费速度只要跟不上生产速度日志就会像滚雪球一样膨胀直到把内存打满连常规业务 key 都受牵连。我见过一个真实事故团队上线新消费者时创建消费组误用了0作为游标新组立刻开始从头读取 Stream 里全部历史消息几百万条消息一口气灌进消费逻辑服务直接被打崩。如果只关心增量消费创建消费组时应该用$而不是0。这个细节不写进文档根本不知道但踩一次就是事故级别。另外Stream 的清理策略必须自己定。常用做法是定时XTRIM MAXLEN ~ 100000保留最近十万条或者按时间范围清理别让它无限增长。5. 该用 Redis 还是专业 MQ一张表算清边界5.1 三种 Redis 内建方案对比先放一张矩阵收束一下能力项ListPub/SubStream消息确认无需自研无XACK 原生支持消息持久化RDB/AOF 间接无RDB/AOF 间接广播模式不支持天然支持多消费组等价广播消费组竞争模拟实现不适用原生支持回溯读取有限不支持按 ID 范围读取延迟消息借助 Sorted Set不支持需自行实现典型延迟毫秒级毫秒级毫秒级List 简单直接可靠性靠业务代码自己补Pub/Sub 只能在在线广播场景用Stream 语义最完整是我不附加条件直接推荐的服务端队列实现方案。5.2 为什么核心链路不直接用 Redis 替代 Kafka 或 RabbitMQ专业 MQ 和 Redis 之间的真正差距不在吞吐和延迟上而在可靠性的存储语义上。Kafka 讲的是分区副本、ISR 同步、acks 配置从写入那一刻起就保证“数据到了多副本磁盘”RabbitMQ 讲的是 confirm 模式、持久化队列、死信交换机也是从写入端就开始做安全派发。而 Redis 的持久化本质是 AOF 追加日志加 RDB 快照是“定期落盘”的副产品不是为消息队列设计的存储语义。举个具体例子一个 Redis 实例上挂着 Stream 队列和用户会话缓存。凌晨消息大量堆积AOF 重写占满磁盘紧接着主从切换切换时主库最近一批数据可能还没同步完Stream 里最近几百条消息就丢了。更危险的是同一个实例上可能还丢了用户登录态故障半径完全不可控。要把 Redis MQ 用到可靠的级别得给它独立部署实例加哨兵、加集群监控 AOF 重写和内存水位这些运维成本加起来不见得比直接上 Kafka 低。5.3 我的选型经验什么体量适合用 Redis 做 MQ根据上面的差距我个人的经验判断是这样的当天消息量级在百万以内、消息可以容忍秒级延迟、业务场景能接受极端情况下丢失少量数据的直接用 Redis Stream 非常划算。加一台 Redis 实例代码成本几乎为零典型场景是活动通知推送、积分明细异步落库、日志内部分发、异步生成报表。只要需求文档里出现“这条数据绝对不能丢”“积压三天也没事”“需要严格回溯审计”其中任意一句就老老实实把 Kafka 或 RabbitMQ 引进来。消息队列选型的本质从来不是对比谁的延迟低而是衡量数据丢失的代价有多高。6. 面试复盘下次再被问到我会这样组织答案6.1 答题框架从 API 到语义再到边界把这道题放到实际面试场景里我建议的答题结构是四层。第一层先回答“能做”给出 List 的 LPUSH BRPOP 代码示意同时主动暴露它的缺陷没有确认机制消息一旦弹出就和 Redis 无关。第二层引出 Pub/Sub讲清楚它是广播语义适合在线通知但因为不持久化所以不能承担可靠投递。第三层落到 Stream重点讲 XADD、消费组、XACK、PEL 重投这组机制。这里需要带上消费组的创建参数细节——0和$代表不同的消费起点这是区分你有没有实战经验的关键点。第四层谈边界。强调 Redis MQ 的可靠性取决于机器内存、持久化配置和运维手段和 Kafka 的差距不在性能而在极端场景下的数据安全性。能讲到这一层面试官就已经无法因为“你没用过 Kafka”而给你扣分了。6.2 常见追问怎么接整理几个高频追问和可复用的回答思路这些在真实项目里也一样能用得上消息丢失怎么防止开 AOF 每次写盘、加主从复制消费端配合 Stream 的 PEL 做重试。核心是让丢失只发生在机器全挂的极端场景而不是日常运行的常态。消息重复消费怎么办消费端做幂等用唯一业务键判重在最底层数据库表上挂唯一索引。消息堆积怎么办监控 Stream 长度设置阈值报警消费者水平扩容同时用 XTRIM 做清理策略。如果堆积量超过单实例内存上限就该换专业 MQ 了。延迟消息怎么实现用 Sorted Set 存时间戳后台轮询到期任务再投递到 Stream 或 List。整体答题的关键是让面试官看到你全程都在做“权衡”。没有人会劝你在生产环境把核心交易队列放在 Redis 上但你能清楚说出什么条件下可以用、什么条件下不能用、用了以后要盯哪些监控指标这道题基本就稳了。再回到那位朋友的遭遇。他后来问我项目里已经装了 Redis又不想多引一套 MQ 依赖运维到底怎么判断要不要上 Stream我的答案是先问产品经理一句“消息丢了会怎样”。如果回答是“影响不大可以补拉”直接用 Redis Stream如果回答是“费用算错、客户投诉、资损”立刻上专业 MQ。这道题没有标准答案只有对工具性价比的清醒认知。希望这篇复盘能让你在面试和实际选型中少踩一点我们踩过的坑。

相关新闻

周志华《机器学习》习题5.5:标准BP与累积BP算法从零实现与对比

周志华《机器学习》习题5.5:标准BP与累积BP算法从零实现与对比

1. 从一道课后习题看BP算法的真正门槛很多人学机器学习,卡在神经网络这一章,不是因为公式看不懂,而是因为看懂了公式却不知道代码怎么写。周志华《机器学习》第五章习题5.5就是这样一个典型:它要求你基于标准BP算法和累积BP算法&a…

2026/10/12 9:58:48 阅读更多 →
Claude Code 源码架构深度解析(二):拆解 Agent Runtime 的 1729 行——queryLoop 与 Streaming Tool Execution 如何驱动 TaoToke

Claude Code 源码架构深度解析(二):拆解 Agent Runtime 的 1729 行——queryLoop 与 Streaming Tool Execution 如何驱动 TaoToke

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 9:58:48 阅读更多 →
使用Trea配置SQLite数据库MCP,实现AI自动化数据处理|TaoToken统一Key接入实践

使用Trea配置SQLite数据库MCP,实现AI自动化数据处理|TaoToken统一Key接入实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 9:58:48 阅读更多 →

最新新闻

【Claude Code】“源码”解读(一):架构总览与设计哲学——为什么 Claude 和 GPT 不一样?TaoToken 统一 Key 通道的接入视角

【Claude Code】“源码”解读(一):架构总览与设计哲学——为什么 Claude 和 GPT 不一样?TaoToken 统一 Key 通道的接入视角

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 10:44:39 阅读更多 →
GoWind Admin:内置微服务接口聚合的企业级全栈中后台框架

GoWind Admin:内置微服务接口聚合的企业级全栈中后台框架

1. 项目概述:这套全栈中后台框架到底解决什么问题做中后台开发这么多年,我最大的感受是:大部分企业项目真正花时间的不是业务逻辑本身,而是那些“看起来很简单、做起来全是坑”的基础设施——登录鉴权、权限路由、菜单管理、用户角…

2026/10/12 10:44:39 阅读更多 →
不加班也能持续成长:AI工程师的高效学习与时间管理实战指南

不加班也能持续成长:AI工程师的高效学习与时间管理实战指南

先给自己泼一盆冷水:作为一名在职AI工程师,你大概率已经发现一个扎心的事实——技术栈更新快到你还没把上一套框架吃透,新一代大模型又已经刷屏了。GitHub上每天上百个新仓库冒出来,ArXiv上论文刷得比朋友圈还勤快。如果不持续学习…

2026/10/12 10:44:39 阅读更多 →
cProfile报错ProfilerNotRunningError:原因、排查与正确用法

cProfile报错ProfilerNotRunningError:原因、排查与正确用法

1. 报错现场:一个看似“莫名其妙”的性能分析异常先看一段触发了这个报错的代码:import cProfileprof cProfile.Profile() # 注意:这里没有调用 prof.enable() 或 prof.enable() 在别处被调用了但没有生效 # ... 执行需要分析的代码 ... pro…

2026/10/12 10:44:39 阅读更多 →
基于SSM与MySQL的网上选课系统设计与实现

基于SSM与MySQL的网上选课系统设计与实现

1. 网上选课系统的核心需求与设计思路先说结论:网上选课系统的本质,就是把传统教务场景里的人工选课流程搬到线上,让"课程资源分配"这件事变得更透明、更高效。听起来简单,但真正动手写代码之前,如果不对需求…

2026/10/12 10:44:39 阅读更多 →
Spring @Required 注解废弃解析:依赖注入校验演进与构造器注入迁移

Spring @Required 注解废弃解析:依赖注入校验演进与构造器注入迁移

1. 一个被遗忘的注解,为什么还值得聊Required这个注解,如果你是从 Spring Boot 时代入行的,大概率没见过它,甚至在 IDE 里敲出来会发现它上面压着一道醒目的删除线。它属于那种"存在于文档里、消失在代码里"的元老级 AP…

2026/10/12 10:43:37 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →