1. 为什么要在 Claude Code 里复刻 Redis 慢查询Redis 的 slowlog 是一套很轻量的慢查询记录机制服务端在每条命令执行前后打点耗时超过slowlog-log-slower-than阈值就写进一个 FIFO 队列队列长度由slowlog-max-len控制之后用slowlog get、slowlog len、slowlog reset三条子命令做查询和维护。它不依赖外部组件纯内存操作所以非常适合拿来当指令复刻的练手对象。我这次做的事情是把这套 slowlog 语义在本地用 Claude Code 复刻一遍并且把 AI 工具的接入通道统一收敛到 TaoToken。原因很直接Claude Code 这类 CLI 编码工具需要稳定的模型通道如果每个工具各配一套 Key、各写一份环境变量配置会散落在 shell、项目目录、IDE 插件里排查起来很痛苦。TaoToken 提供统一的 API 入口和 Key 管理把模型对话、编码计划、控制台、API Keys 都放在一个后台Claude Code 只需要认一个ANTHROPIC_BASE_URL和一个 Key 就能跑起来。这篇文章面向两类人一是想用 Claude Code 做代码复刻、但还没把模型通道理顺的开发者二是想验证 slowlog 行为、需要一套可复制配置和验证脚本的 Redis 使用者。全文会给出一份可直接抄的settings.json骨架、slowlog 复刻脚本的验证动作以及我实际踩过的几个报错。读完你应该能在本地把慢查询指令复刻这条链路完整跑通而不是停在装好了但不知道怎么验。2. TaoToken 前置统一 Key 与 Claude Code 接入通道2.1 为什么先做通道统一Claude Code 默认走 Anthropic 官方端点配置项分散在环境变量和项目级 settings 里。如果你同时用多个 AI 工具比如模型对话、Coding Plan、Agent 任务每个工具一套凭证切换成本很高。TaoToken 的做法是提供一个兼容 Anthropic 协议的 API 入口Key 在控制台统一签发工具侧只改 base URL 和 Key 两个值。需要提前说明TaoToken 是合规的 API 聚合与统一接入服务不是任何形式的网络中转工具本文所有配置都只涉及正常的 HTTPS API 调用。2.2 拿到 Key 与确认端点进入控制台后在 API Keys 页面创建一个新 Key复制出来只显示一次建议直接写进本地密钥管理或环境变量文件不要提交到 Git。端点信息如下用途地址官网入口https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentAPI 基址https://taotoken.net/api模型对话https://taotoken.net/api/chatCoding Planhttps://taotoken.net/coding-plan控制台https://taotoken.net/consoleAPI Keyshttps://taotoken.net/api-keys接入文档https://taotoken.net/docClaude Code 接入https://taotoken.net/claudecodeanthropic注意API 基址不带任何查询参数直接写https://taotoken.net/api即可。带 UTM 的链接只用于官网入口和 CTA不要混进代码配置里。2.3 环境变量与项目目录约定我习惯把凭证放在 shell 的私有 profile 里项目目录只保留非敏感的 settings。先导出两个变量export ANTHROPIC_BASE_URLhttps://taotoken.net/api export ANTHROPIC_API_KEYsk-你的TaoTokenKey验证变量是否生效echo $ANTHROPIC_BASE_URL echo ${ANTHROPIC_API_KEY:0:8}第二条只打印前 8 位避免完整 Key 出现在终端历史里。如果输出为空说明 profile 没被 source先执行source ~/.zshrc或source ~/.bashrc。3. 可复制配置settings.json 骨架与 slowlog 复刻脚本3.1 settings.json 骨架Claude Code 支持项目级.claude/settings.json把模型通道和权限边界写进去团队协作时不用每个人手动配。下面是我实际在用的骨架字段含义写在注释里JSON 不支持注释实际文件请去掉注释行{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_API_KEY: sk-你的TaoTokenKey }, permissions: { allow: [ Read, Edit, Bash(redis-cli:*), Bash(go test:*) ], deny: [ Bash(rm -rf:*), Bash(git push:*) ] }, model: claude-sonnet-4-5 }几个关键点env里的 base URL 必须是https://taotoken.net/api不要带尾斜杠permissions.allow里显式放行redis-cli和go test这样 Claude Code 在验证 slowlog 时不会每一步都弹确认deny里挡掉危险命令避免 AI 在复刻过程中误删文件。3.2 slowlog 复刻脚本复刻的核心是把 Redis 的四个参数映射到本地实现slowlog-log-slower-than阈值微秒、slowlog-max-len队列长度、slowlog_entry_id自增 ID、slowlogFIFO 队列。下面是一段可直接跑的验证脚本用redis-cli触发慢查询并读取结果#!/usr/bin/env bash set -euo pipefail REDIS_HOST${REDIS_HOST:-127.0.0.1} REDIS_PORT${REDIS_PORT:-6379} # 1. 把阈值设为 0队列长度设为 1确保每条命令都入队且只保留最新一条 redis-cli -h $REDIS_HOST -p $REDIS_PORT config set slowlog-log-slower-than 0 redis-cli -h $REDIS_HOST -p $REDIS_PORT config set slowlog-max-len 1 # 2. 清空历史避免旧记录干扰 redis-cli -h $REDIS_HOST -p $REDIS_PORT slowlog reset # 3. 触发一条命令 redis-cli -h $REDIS_HOST -p $REDIS_PORT set k v # 4. 读取慢查询应只看到 set k v 这一条 redis-cli -h $REDIS_HOST -p $REDIS_PORT slowlog get # 5. 再触发一条验证 FIFO 覆盖 redis-cli -h $REDIS_HOST -p $REDIS_PORT set k1 v1 redis-cli -h $REDIS_HOST -p $REDIS_PORT slowlog get # 6. 查看当前队列长度 redis-cli -h $REDIS_HOST -p $REDIS_PORT slowlog len把这段存成verify_slowlog.shchmod x后执行。脚本里每一步都对应 slowlog 的一个语义config set改阈值和长度slowlog reset清队列slowlog get读记录slowlog len看长度。跑通它等于把 Redis 慢查询的对外行为完整验了一遍。3.3 让 Claude Code 参与复刻如果你要在自己的项目里复刻这套逻辑比如用 Go 重写一个 mini-redis可以把 Redis 源码目录通过/add-dir加进 Claude Code 的工作范围让它读源码、对齐语义、生成 spec再按 spec 落地。这一步的关键是先自己读懂 slowlog 的四个参数和 FIFO 淘汰逻辑再让 AI 输出代码否则你没法判断它写得对不对。4. 验证请求slowlog get/reset 的成功结果长什么样4.1 预期输出执行上面的脚本后第 4 步的slowlog get应该输出类似下面的结构不同 Redis 版本字段顺序一致数值不同1) 1) (integer) 1 2) (integer) 1778465322 3) (integer) 29 4) 1) set 2) k 3) v四个字段依次是慢查询 ID、执行时间戳、耗时微秒、命令与参数列表。第 5 步再触发set k1 v1后slowlog get应该只返回set k1 v1因为队列长度被设成了 1旧的set k v被 FIFO 淘汰。第 6 步slowlog len应返回1。4.2 用 Claude Code 做一次端到端验证在项目目录里启动 Claude Code让它执行验证脚本并解释输出claude进入交互后输入读取 verify_slowlog.sh执行它然后逐条解释 slowlog get 返回的四个字段分别代表什么 并确认 slowlog-max-len1 时旧记录是否被正确淘汰。如果通道配置正确Claude Code 会调用 Bash 工具执行脚本并把输出贴回来做解释。这一步同时验证了两件事TaoToken 通道可用slowlog 复刻行为符合预期。4.3 验证模型对话通道如果你想单独确认模型通道是否通可以用模型对话入口发一条最小请求curl -s https://taotoken.net/api/chat \ -H Authorization: Bearer $ANTHROPIC_API_KEY \ -H Content-Type: application/json \ -d {model:claude-sonnet-4-5,messages:[{role:user,content:ping}]}返回里有正常的content字段就说明通道没问题。这一步和 slowlog 无关但它是排查到底是通道挂了还是脚本错了的分界线。5. 本篇常见错排查5.1 报错slowlog get返回空列表最常见的原因是阈值没设对。slowlog-log-slower-than默认是 10000 微秒10 毫秒普通set k v根本达不到所以队列是空的。解决办法就是脚本第 1 步把它设成 0让所有命令都入队。另外确认slowlog reset之后确实触发了新命令否则队列本来就是空的。5.2 报错config set提示权限不足有些托管 Redis 实例禁用了CONFIG SET会返回ERR unknown command或权限错误。这种情况下改用启动参数或配置文件设置slowlog-log-slower-than和slowlog-max-len重启后生效。本地自建实例一般没这个问题。5.3 报错Claude Code 提示401或invalid api key先检查ANTHROPIC_API_KEY是否完整、有没有多余空格或换行。然后确认ANTHROPIC_BASE_URL是https://taotoken.net/api没有尾斜杠、没有拼错。如果 Key 是在控制台刚创建的确认没有复制到一半。实在不确定就重新去 API Keys 页面生成一个替换后重开终端。5.4 报错settings.json不生效Claude Code 读取的是项目根目录下的.claude/settings.json不是随便哪个目录。确认文件路径正确JSON 格式合法可以用python -m json.tool .claude/settings.json校验。另外环境变量优先级高于 settings如果 shell 里已经导出了旧值会覆盖文件里的配置先unset再试。5.5 报错slowlog 队列长度不按预期淘汰如果你把slowlog-max-len设成 1但slowlog get返回了多条检查是不是有多个客户端在并发写。FIFO 淘汰是按写入顺序的并发场景下你看到的最新一条可能不是你以为的那条。验证时用单客户端串行执行结果才稳定。6. 把通道和复刻流程固化下来走到这里你手上应该有两样东西一份能跑的settings.json骨架和一套能验证 slowlog 行为的脚本。接下来要做的不是继续加功能而是把这两样固化进日常流程。通道侧建议把 TaoToken 的 Key 管理当成项目基础设施的一部分新工具接入时先查接入文档确认 base URL 和鉴权方式再写配置长期跑编码和 Agent 任务的话用 Coding Plan 统一管理额度避免每个工具单独充值。复刻侧把verify_slowlog.sh放进项目仓库的scripts/目录每次改动 slowlog 相关逻辑就跑一遍用slowlog get和slowlog len的输出做回归基线。我自己的习惯是每复刻一个 Redis 指令就先写验证脚本再让 Claude Code 按 spec 实现最后用脚本验收。顺序反过来很容易变成AI 写完我看着像对的就过了而 slowlog 这种带 FIFO 淘汰和阈值判断的逻辑恰恰是最容易在边界上出问题的地方。脚本跑通、输出对得上才算真的复刻完成。
