Redis与AI结合:从缓存到向量检索与语义缓存的落地实践

发布时间:2026/10/1 23:15:50
Redis与AI结合:从缓存到向量检索与语义缓存的落地实践 说句实话第一次看到“Redis 已正式接入 AI”这个说法的时候我先是愣了一下然后反应过来这句话营销味是重了一点但背后确实是过去两年 Redis 团队和整个 AI 工程圈一起蹚出来的结果。以前提起 Redis大家想到的就是缓存、排行榜、分布式锁现在再去翻 Redis 的官方文档Redis Stack 已经带上了向量检索、语义缓存、AI Agent 状态管理官方客户端库 redisvl 也长成了 AI 专用形状Redis 从数据缓存工具正式跨进了 AI 基础设施的行列。这篇文章我想从实际工程角度把“Redis 接 AI”这件事拆开讲清楚它到底解决了 AI 应用里的哪些硬核问题哪些场景值得上哪些场景最好别硬凑以及我自己在项目里实测下来的一套完整打法。正在做 RAG、Agent、大模型接口加速的人都用得上如果你只是听说过“Redis 和 AI 结合”这个概念看完也能建立一条完整的认知和落地路径。不是学术式的抽象推演都是可以直接抄作业的实操内容。1. Redis 从“缓存中间件”到“AI 基础设施”的转变1.1 AI 应用给数据层出的三道难题先说第一个难题大模型接口太慢、太贵。我测过不少主流模型的接口单次请求从几百毫秒到几秒都有费用按 token 算一次常规对话动辄几千 token。如果产品每天有几十万次请求每次都重新烧一遍 token时间和成本都扛不住。缓存是最直接的解法而 Redis 天生就是干这个的。我自己做过一个文档问答系统上线初期每个问题都去调大模型一个月的账单让人肉疼。后来在接口前加了一层 Redis 缓存请求先查缓存命中就直接返回只有没命中才去调模型。就是这样一层简单的改动模型调用量降了差不多七成响应时间也从一两秒降到了几十毫秒。Redis 在这里的优势是它能存任意字符串刚好覆盖大模型返回的各种格式TTL 又能控制缓存多久失效根本不需要再单独搭一套缓存服务。第二个难题AI 应用普遍“无状态”但业务必须“有记忆”。不管是一个简单的聊天机器人还是复杂的 Agent 系统每次调用大模型接口本质上是独立的模型不会记得上一轮说过什么。所以你得把对话历史、Agent 当前计划、已经执行完的工具结果全部存下来。这类数据的特点很典型生命周期短、需要高频读写、经常要清理。用 MySQL 存也行但每次取历史都查一次库几百毫秒就没了而且会话一多清理起来很麻烦。Redis 的做法是直接用 Hashes、Lists、Strings 这些数据结构表达状态再配合自带的过期时间一个键一个会话到点自动销毁。我现在的 Agent 项目里几乎所有会话状态都走 Redis读写在毫秒级别清理完全不用操心。第三个难题RAG 应用需要“语义检索”传统数据库做不到。做 AI 应用的人应该都听过 RAG简单说就是先把文档切片转成向量用户提问时再从里面找语义最相近的内容喂给模型。这个“找相近内容”的动作叫向量检索用 MySQL 的 LIKE 做文本匹配效率低且语义上完全跑偏。业界通用方案是给每条内容算一个向量用余弦相似度做搜索。早年这个功能只有专职向量数据库提供Redis 在 Stack 版本里直接做了向量索引一条命令就能建好索引这让很多没有专门搜索基础设施的团队松了一大口气。从这三道难题往回看Redis 被拉进 AI 阵营并不是偶然它恰好补上了 AI 应用在数据层最缺的那几块拼图。1.2 Redis 能接住这个盘子的底气在哪说句公道话把 Redis 拉进 AI 领域并不只是靠市场热度。Redis 的核心优势在于第一内存计算带来的微秒级读写这对 AI 链路里“要高命中率、低延迟”的环节几乎是唯一解第二数据结构够丰富String 存缓存、List 当队列、Stream 做消息流、Hash 存 Agent 状态、ZSet 做排序和滑动窗口一个组件就能覆盖多种需求省掉一大批额外中间件第三部署足够轻一条 Docker 命令就能拉起来不像某些搜索引擎或专用向量库那样动辄几个节点起步。关键的是官方把生态补齐了。用 Redis Stack 或者 Redis 8 及以上版本向量索引已经不再是实验特性官方还推出了 redisvl 这个 Python 包里面封装了语义缓存、向量索引、AI 应用数据模型。实测下来一个同时有一些 Python 和 Redis 基础的人花半天就能把一套 RAG 检索链路搭起来放在三年前我是不敢想的。当然这也不是说 Redis 能取代所有专业向量数据库但在中小规模和快速原型阶段它的性价比确实突出。我特别喜欢它的一点是不用专门运维一套新组件。团队里本来就有 Redis现在只是把它的用法从“缓存”扩展到了“AI 数据底座”运维压力增量很小故障面也没有扩大。这一点在创业团队里非常吃香少一个中间件就少一堆半夜的告警电话。1.3 这套能力适合谁来用按我自己的经验适合的人群和场景大概有三类。第一类是个人开发者或开源项目作者目标是快速把 AI 功能跑起来不想花时间运维一整套搜索集群第二类是已经有 Redis 在跑、又不想引入一堆新依赖的老项目直接在现有 Redis 上扩展向量和语义缓存就行第三类是做 RAG、Agent、模型网关加速的后端工程师需要低延迟的数据访问层。反过来如果你现在的向量数据已经到亿级、对强一致有极高要求、或者团队根本没有维护 Redis 高可用的能力那我不建议硬上。工具没有绝对好坏只有匹配不匹配。Redis 接 AI 的边界我会在最后一节单独展开这里先把适用人群框住。2. Redis 与 AI 结合的三大核心技术点2.1 向量检索把 Redis 变成 RAG 的“检索外挂”先讲清楚向量是什么。我常用一个生活类比给每张照片打上一串坐标内容越像的照片坐标就越靠近。AI 里的 embedding 模型负责把一段文字变成一串数字数组比如 384 维或者 1536 维的向量。用户提问时把问题也转成向量然后在几何空间里找离它最近的几条记录返回的就是语义相近的内容。这个搜索动作就叫向量检索。在 Redis 里做向量检索底层常用两个算法FLAT 和 HNSW。FLAT 是拿所有向量暴力比对小数据量时非常准确数据一多每条请求都要全量算一遍速度明显变慢HNSW 是建图近似搜索速度快理论上有一点点精度损失但实际用下来效果很好。我的建议是数据量几万条以内FLAT 和 HNSW 随便选几十万条以上直接用 HNSW再按文档推荐值去调 m 和 ef_construction 参数。我自己的项目基本都是 HNSW因为线上数据只会越来越多不想后期再改索引。距离度量同样关键。Redis 支持 COSINE、L2、IP 等距离方式但大多数文本向量模型是基于余弦相似度设计的所以 COSINE 是最通用的选择。如果你的向量本身已经归一化过L2 和 COSINE 在排序上是等价的但 COSINE 的阈值语义更好理解。我在代码里一般把返回分数控制在 0.15 左右算命中具体数值要根据实际语料测完后调整。聊到这里有一个常见误区embedding 模型和距离度量是绑定的换模型就要重新验证度量方式不能想当然沿用旧参数。2.2 语义缓存让大模型免于重复劳动大模型接口最大的浪费是同样的意思被反复问。业务上用户问“Redis 怎么安装”“如何安装 Redis”“Redis 安装教程”其实是同一个意图但字面不同。传统缓存的 key 是原文的哈希这几个问题全是不同 key永远命中不了如果先把输入文本做向量化再到 Redis 里找“历史上有没有语义相近的问题”命中之后直接返回上次的答案就能省掉一整个大模型调用。这个方案就是语义缓存工程上不复杂但收益很直接。语义缓存的实现逻辑可以分解成四步第一步把用户输入交给 embedding 模型转成向量第二步拿向量去 Redis 的向量索引里做相似度查询第三步如果检索到比阈值更近的结果说明类似问题回答过直接返回缓存答案第四步如果没命中照常调用大模型再把“问题向量 答案”写回 Redis同时设置 TTL 控制缓存时长。这套逻辑不依赖模型厂商以后换模型也一样能用。阈值设置是语义缓存最容易翻车的地方。设得太严等于没缓存命中率低省不了钱设得太宽语义不相干的问题也会返回同一个答案用户会觉得答非所问。我一般会先找几百条真实问题把同意图的不同说法放进测试集跑一遍相似度分布再选一个保守的阈值。比如一个生产项目里我选的是 0.18 左右命中率大概 12%对成本已经很有帮助。如果你想进一步压成本可以对高频问题叠加一层精确缓存让热门问题的命中率直接到百分百。2.3 Agent 记忆与状态管理让 AI 助手“记得住事”Agent 和普通聊天不一样。一个稍复杂的 Agent 会先拆解任务然后依次调用搜索、数据库查询、代码执行等工具最后汇总结果。用户关掉页面再回来Agent 得能恢复之前执行到哪一步、哪些工具已经出过结果。这个实现起来就是一个状态机而状态存哪儿Redis 是很顺手的选项。我通常用 Hash 结构存一个 Agent 会话的字段比如当前计划、已完成工具列表、中间结果、对话摘要每个字段都是 JSON 字符串再对整个会话设置 TTL让它不活跃后自动过期避免僵尸会话持续占内存。这里有个提醒Agent 状态和纯缓存不一样它是业务数据丢了会让用户重来一遍所以生产环境不建议只用内存模式。持久化至少开 AOF并且每次状态更新后做异步快照。我自己踩过坑只开了 RDB结果 Redis 进程重启后Agent 丢了最近几分钟的全部步骤用户投诉率直接起飞后来改成 AOF everysec 才稳下来。3. 实操用 Redis Stack 搭建 AI 应用数据底座3.1 环境准备五分钟装好 Redis Stack先把环境弄起来。最省事的方式是 Docker一条命令搞定docker run -d --name redis-ai \ -p 6379:6379 \ -p 8001:8001 \ redis/redis-stack:latest这里 6379 是 Redis 常规端口8001 是配套的 RedisInsight 可视化界面。如果只想跑服务端可以用redis/redis-stack-server:latest不过少了可视化面板调试时没那么直观。macOS 用户如果不想用 Docker可以走 Homebrew 的 tapbrew tap redis-stack/redis-stack brew install redis-stack-serverWindows 用户建议直接用 Docker Desktop 或者 WSL2不要去死磕原生安装包官方对 Windows 的原生支持一直比较弱折腾半天不如虚拟机省心。装好之后推荐装两个东西。一个是可视化客户端我自己常用 Another Redis Desktop Manager界面顺手免费能直接看 key 和内存占用另一个是官方自带的 RedisInsight跑向量搜索的调试体验好还能看索引详情。命令行党用 redis-cli 也行但调试向量查询时有个界面会轻松很多。Python 这边建议建一个干净的虚拟环境然后安装pip install redis redisvl sentence-transformerssentence-transformers用来做文本转向量redisvl是官方出的 AI 工具库装好之后确认版本没报错就可以继续了。3.2 向量检索全流程索引、写入、查询一次打通先准备一个本地 embedding 模型。我习惯用all-MiniLM-L6-v2输出 384 维向量模型小CPU 上就能跑适合做示例。完整代码如下import numpy as np from redis import Redis from redisvl.index import SearchIndex from redisvl.query import VectorQuery from sentence_transformers import SentenceTransformer # 1. 连接 Redis并准备 embedding 模型 redis_client Redis(hostlocalhost, port6379, decode_responsesFalse) model SentenceTransformer(all-MiniLM-L6-v2) def embed_text(text: str) - list: vec model.encode(text) return np.asarray(vec, dtypenp.float32).tolist() # 2. 定义索引结构 schema { index: {name: ai_docs, prefix: doc:}, fields: [ {name: content, type: TEXT}, {name: embedding, type: VECTOR, attrs: { dims: 384, algorithm: HNSW, distance_metric: COSINE, datatype: FLOAT32 }} ] } index SearchIndex(schema, redis_client) index.create(overwriteTrue) # 3. 写入几条文档 documents [ {content: Redis 是内存数据结构存储系统常用于缓存。, embedding: embed_text(Redis 是内存数据结构存储系统常用于缓存。)}, {content: 向量检索通过余弦相似度寻找语义接近的内容。, embedding: embed_text(向量检索通过余弦相似度寻找语义接近的内容。)}, {content: 大模型接口延迟高需要用缓存降低调用成本。, embedding: embed_text(大模型接口延迟高需要用缓存降低调用成本。)} ] index.load(documents) # 4. 查询 query_vec embed_text(如何在缓存场景中使用 Redis) query VectorQuery(vectorquery_vec, return_fields[content], num_results3) results index.query(query) for item in results: print(item[content])这段代码里的关键点有两个。第一dims必须和 embedding 模型的输出维度一致改模型忘改维度是新手最容易踩的坑第二距离度量我用的是 COSINE因为文本模型基本都是按余弦相似度训练的。实际项目里文档数量会远多于示例。写入时要注意批量插入性能不要一条一条HSET尽量用 pipeline 或者index.load批量写入。索引建好之后查询延迟在毫秒级实测百万条以内的中文语料HNSW 的召回率和速度都在可接受范围内。3.3 语义缓存落地给大模型接口套一层“记忆”语义缓存的完整实现可以直接基于 redisvl 的扩展模块也可以自己写。我先给一个自实现版因为它的逻辑更透明方便排查问题from redis import Redis import hashlib r Redis(hostlocalhost, port6379, decode_responsesTrue) def get_llm_answer(question: str) - str: # 这里接真实的大模型接口 return 答这是一个示例回答。 def ask(question: str) - str: # 精确缓存字面完全一致的问题直接命中 exact_key llm_cache:exact: hashlib.sha256(question.encode()).hexdigest() cached r.get(exact_key) if cached: return cached # 语义缓存把问题向量化去向量索引里找近似问题 query_vec embed_text(question) similar search_similar(query_vec, top_k1) if similar and similar[distance] 0.18: return similar[answer] # 未命中调用大模型并写缓存 answer get_llm_answer(question) r.setex(exact_key, 3600, answer) save_semantic_entry(question, answer) return answer这里search_similar就是从上一节的向量索引里查相似问题distance是余弦距离小于阈值就认为语义一致。我习惯两套缓存同时用精确缓存放字面一致的高频问题语义缓存放意图相近的泛化问题。前者逻辑简单可靠后者覆盖面广配合起来效果最好。需要注意一个问题不要把用户名、会话 ID、时间戳这些噪声塞进提问文本里再去做缓存 key。之前有个同事把用户ID拼进了 key结果同一个问题不同用户查缓存全都不命中大模型费用翻了几倍。语义缓存的设计原则是key 只保留真正影响语义的部分。3.4 Agent 状态存储会话断点续跑的实现Agent 的状态我用 Hash 加 JSON 来存代码很简单import json from redis import Redis r Redis(hostlocalhost, port6379, decode_responsesTrue) def save_agent_state(session_id: str, state: dict, ttl: int 3600): key fagent:{session_id} r.hset(key, mapping{k: json.dumps(v) for k, v in state.items()}) r.expire(key, ttl) def load_agent_state(session_id: str) - dict: raw r.hgetall(fagent:{session_id}) return {k: json.loads(v) for k, v in raw.items()}为什么用 Hash 而不是一个大的 String因为在真实 Agent 里你可能只想更新其中一个字段比如“工具结果”而不想反复读写整个状态对象。Hash 支持单字段更新网络开销小得多。另一个好处是调试时可以单独看某个字段的值不用把一个巨大的 JSON 全文拖出来。TTL 的取值要结合业务场景。如果用户可能在半小时后回来继续对话那 TTL 至少大于半小时如果一个会话三天后肯定失效那就设三天。这里并没有通用标准但有一点值得注意TTL 不是越长越好Agent 状态里可能包含敏感信息长期不清理会积累数据风险和内存压力。如果要做断点续跑还可以多存一个resume_mark字段比如记录任务已经执行到第几步用户回来时 Agent 直接从resume_mark开始而不是傻傻地重新跑一遍全部工具。这个字段本身也是一个普通的 Hash 字段存整数就行不用额外设计表结构。4. 缓存治理与性能调优4.1 内存规划淘汰策略与估算AI 场景很容易让 Redis 内存疯涨因为向量数据比普通缓存大得多。先算一笔账384 维的 embedding用 float32 存一条就是 1536 字节再加索引结构实际占用大概是原始向量的 2 到 3 倍。所以 100 万条文档的向量索引轻轻松松吃掉几个 GB 内存。上线前不把这笔账算清楚后面就是半夜被内存告警叫醒。配置上一定要设maxmemory然后根据用途选淘汰策略。如果你的 Redis 完全当作缓存组件allkeys-lru是最省心的内存满了自动淘汰冷数据但如果你不希望 Agent 状态被淘汰那最好用volatile-lru并且给所有带 TTL 的 key 设置合理的过期时间。我的做法是缓存 key 都带 TTLAgent 状态也带 TTL但 TTL 更长淘汰策略用volatile-lru这样最不容易误删业务状态。还有一个小细节向量索引本身也可能触发内存波动尤其是 HNSW 的构建参数ef_construction和M设得过高时构建期的内存会临时飙升。我在一次批量导入 50 万条向量时就因为参数没调好Redis 直接 OOM 重启了。批量导入前建议先小批量测试一下峰值内存再决定要不要分批写入。4.2 序列化与连接池别让基础设置拖后腿序列化是个容易被忽略的坑。单条大文本缓存比如大模型返回的内容用 String 直接存字符串是最稳的value 大小最好控制在 1MB 以内超过 1MB 的大 value 会带来网络和内存碎片问题。对象要落 Redis我推荐 JSON跨语言兼容出问题也好排查追求极致性能可以考虑 MessagePack但调试时不太友好。我最不建议的是拿 Python 的 pickle 直接序列化存 Redis。当时图省事把自定义对象直接 pickle 进去后来升级了一次代码对象的字段结构变了老数据全部反序列化失败那真是自己挖坑自己跳。如果一定要存对象用 JSON 加版本号字段未来兼容会从容很多。连接池方面redis-py 默认有连接池但生产环境最好显式设置max_connections避免突发流量把 Redis 打挂。超时参数也值得配置比如连接超时和读取超时。我记得有一次线上服务频繁报错排查半天发现是连接超时设的是默认值Redis 负载一上来客户端就全部卡住调大超时并加了重试策略后稳定性才上来。这里要注意的是重试必须配合幂等操作否则重试会重复写入脏数据。4.3 命中率与慢查询老手艺还得捡起来把 Redis 接进 AI 后很多人只顾着写代码忘了看监控。其实 Redis 的命中率就是 AI 缓存效果的风向标。用INFO stats看keyspace_hits和keyspace_misses命中率低说明缓存设计有问题要么 key 没设计好要么 TTL 太短要么写不进缓存。慢查询也不要忽略。SLOWLOG GET可以看 Redis 慢命令向量检索尤其在数据量大时容易产生慢查询。如果一个向量查询命令执行了几十毫秒可能是 HNSW 参数没调好也可能是返回的字段太多把大量文本从 Redis 拖出来导致网络耗时暴涨。我一般会让查询只返回必要字段比如只返回文档 ID内容再按需从其他存储里取这样能明显降低延迟。另外一个实战经验生产环境务必开启lazyfree-lazy-eviction yes并且关注内存碎片率。向量数据反复写入、删除会导致碎片上升大 key 删除时如果不走 lazy freeRedis 会卡住一小会。这些细节平时不显眼真到流量高峰期就是事故。4.4 缓存击穿与雪崩大模型场景的“烧钱事故”缓存穿透、击穿、雪崩这三个词在后端圈子是老生常谈但放到大模型场景里代价完全不一样。穿透是查一个不存在的数据每次都打到后端击穿是热点 key 失效瞬间巨量请求同时打到模型雪崩是大量 key 同一时间过期整体流量全部打到模型。在 AI 调用场景里热点问题一旦缓存过期几十个并发请求同时去调大模型不仅响应慢账单也会瞬间变难看。我自己遇到的一个典型情况一个热门问题缓存设置了一小时结果整点一到几十个请求同时穿透到模型接口那个小时的大模型费用是平时的五倍。解法是在重建缓存时加分布式锁同一个问题只允许一个请求去调模型其他请求等锁、读新缓存。用 Redis 做分布式锁很简单核心是SET key value NX EX的原子指令。一个谨慎的实现至少要加锁 ID、超时续期防止锁忘了释放把接口直接锁死。雪崩的应对则是在 TTL 上做文章缓存过期时间不要设成一个固定值而是加一个随机抖动比如一小时基础值再上下浮动五分钟这样 key 不会在同一个瞬间集体失效。5. 常见问题与排查技巧实录5.1 问题速查表下面这张表是我在项目实施中反复用到的排查清单列在开头方便快速对照。问题现象常见原因排查思路与解决向量检索结果明显不相关embedding 模型与语言不匹配、距离度量选错、向量未归一化中文场景不要直接用英文 MiniLM 模型改用 bge-m3 等中文友好模型确认 COSINE 与模型匹配语义缓存命中率低阈值太严、key 里混入噪声、文本未做归一化调低 distance 阈值移除用户 ID 与时间戳统一大小写内存持续上涨没设 maxmemory、向量索引参数过高、无 TTL设置淘汰策略调低 HNSW 参数给缓存 key 加过期时间Agent 状态重启后丢失持久化策略太弱、TTL 过短、断连后被删除开启 AOF everysec加长会话 TTL检查客户端连接超时缓存数据与业务不一致更新数据时没删缓存、双删失败采用先更新数据库再删缓存的模式再配合短时间延迟双删突发流量导致模型费用飙升缓存击穿、热点 key 同时过期对热点 key 加分布式锁TTL 加随机抖动这张表不一定覆盖所有情况但可以当作排障的第一入口。5.2 我从实战里踩出来的排查思路很多问题无法直接靠看表解决得靠一套思路。我一般按照“先看内存、再看命中率、最后看慢查询”的顺序排查。内存异常优先看INFO memory如果 used_memory 接近 maxmemory就说明淘汰已经在发生此时命中率很可能在下降然后再看 keyspace 命中率命中率低就回头看 key 设计最后看慢日志定位是哪一类命令拖慢了整体。有一个我特别想强调的教训向量检索不准大多数人第一反应是调 Redis 参数但其实先要检查的是 embedding 模型。英文模型处理中文、或者同一个项目里混用了多个 embedding 模型都会导致语义完全对不上。遇到召回结果离谱时先把文档和问题的向量都打出来直接看相似度矩阵问题出在上游还是下游一目了然。这个习惯帮我省了很多调试时间。另一个容易踩的坑是 Redis 连接断掉后的静默失败。很多客户端库在连接故障时不会立刻抛错而是走完超时再失败这会让你的 AI 接口在 Redis 故障时延迟暴涨。我的建议是给所有 Redis 操作加上超时和降级逻辑如果 Redis 挂了缓存直接旁路掉请求打到模型就行宁可多花钱也不能让用户等死。6. 个人经验什么时候该用 Redis 接 AI什么时候该打住6.1 我推荐的使用姿势做 AI 功能时我现在的默认方案是“一手 Redis 走天下”。内部想法很简单中小规模的 RAG、大模型接口的语义缓存、Agent 的状态管理、工具调用的异步队列全都交给 Redis一个进程解决业务代码也只用依赖一个中间件。这套方案对个人项目和初创团队特别友好部署、维护、排障的成本都低。如果你要做异步批量调用比如离线生成一批摘要或者批量处理用户的文档Redis Stream 是很好用的队列。XADD把任务丢进队列worker 端用XREAD阻塞消费处理完把结果写到对应的 Agent 状态 Hash 里。这比引入 Kafka 或 RabbitMQ 轻量得多对于大多数 AI 应用的数据量完全够用。注意流量的峰值评估如果每秒任务量到几千甚至更高再考虑换更重的消息中间件。6.2 别硬上的场景Redis 接 AI 并不是银弹。我给自己定的边界是三条。第一向量规模到亿级、对召回率要求很高别用 Redis直接上专门的向量数据库后者在分布式、分片、大规模索引上有更成熟的方案第二要求强一致、跨地域多活、复杂事务Redis 的模型不适合做核心业务数据源第三团队没有能力维护 Redis 主从或集群那别把 AI 核心链路完全压在 Redis 上出一个故障整条服务全挂反而更危险。工具选择从来不是“哪个火用哪个”而是“哪个在自己的约束条件下最省心”。Redis 在几十万、几百万条向量的规模下表现很好超过这个量级运维成本会急剧上升不如在架构初期就选对存储。6.3 一点个人体会与组合拳我把几个老项目的缓存组件改成 AI 数据底座之后最大的体会不是“快”而是“省心”。不用在项目里维护一套消息队列、一套向量库、一套状态组件Redis 一个进程全干了运维压力和故障面都小了很多。另一个体会是架构越简单出问题时越容易定位。之前系统里有五个中间件出一次问题要翻五个日志现在大部分链路都在 Redis 里排查基本是看一个地方。最后分享一个我常用的组合拳把 Redis 的 Stream 用来承接 Agent 工具调用结果。Agent 调用外部工具经常要花几秒把这些耗时任务投递到 Stream 里异步处理再用另一个实例消费并把结果写回 Agent 状态 Hash主流程不会被阻塞。这个设计在我实际项目里效果很好尤其适合那些工具耗时不固定、但主流程又需要尽快给用户反馈的场景。拿来即用我建议你下一个项目就这么干。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询