每日 MCP Server

Redis MCP Server:让 Agent 直接读写 Redis 数据库

2026-09-02
数据库仓库
支持客户端:
Claude CodeCursorVS CodeTrae
MCPRedis数据库缓存内存数据库

简介

Redis 是最流行的内存数据库之一,但 Agent 通常只能通过你手写脚本来间接操作。Redis MCP Server 打开了直连通道——让 Claude Code、Cursor、VS Code 中的 Agent 能够直接执行 Redis 命令、查询键值、管理过期时间、分析数据结构。本文介绍 Redis MCP 的核心能力(String/Hash/List/Set/ZSet 操作)、在各客户端中的配置方式、三个实战场景(实时配置热更新 / 缓存数据分析 / 会话存储巡检),以及与 PostgreSQL MCP 的选型对比和安全注意事项。

安装命令

npx -y @modelcontextprotocol/server-redis

为什么 Agent 需要直连 Redis

如果你做过任何带"状态"的后端服务,Redis 几乎一定在技术栈里。它是缓存、是配置中心、是会话存储、是消息队列、是限流计数器——一个 Redis 实例往往承载了系统运行时最鲜活的内存数据。但讽刺的是,当你想让 AI Agent 帮你看看 Redis 里发生了什么时,对话会变成这样:

你:最近登录态老出问题,帮我看看 Redis 里的 session 数据

Agent:我没法直接连 Redis,你帮我跑几条命令吧:
      1. redis-cli -h xxx KEYS "session:*"
      2. 对每个 key 跑 TTL
      3. 把结果贴给我

你:(切到终端,手敲 20 条命令,复制输出,粘回对话)

Agent:好的,我看到了……(半小时过去了)

这就是 Redis 与 Agent 之间那道看不见的墙——Agent 能读代码、能查 SQL 库,却偏偏摸不到那台最关键的 Redis。在 MCP 出现之前,绕过这道墙只有两种办法,而且都很别扭:

办法 A:手写脚本当中介
  你:写一个 Python 脚本,连 Redis 查 session 数据
  Agent:(写脚本)→ 你跑 → 你贴输出 → Agent 分析
  痛点:每个问题都要写一次脚本,本质还是"你在驱动"

办法 B:让 Agent 跑 redis-cli
  你:你直接在终端跑 redis-cli 命令
  Agent:(通过 Bash/Shell MCP 跑命令)
  痛点:输出是纯文本,Agent 难结构化解析;而且 shell 权限太大,
        生产环境不敢给

这两种方式都有同一个问题:Agent 跟 Redis 之间隔了一层"命令行文本",它不知道哪些是 key、哪些是 value、哪些是 TTL,分析时容易把噪声当数据。

Redis MCP Server 把这层壳彻底打掉。它不是一个"帮你跑 redis-cli"的 wrapper,而是一个原生理解 Redis 协议和数据结构的 MCP Server——Agent 调用的是"查一个 Hash 的所有字段"这种语义化工具,而不是"跑一条 HGETALL 命令再解析输出"。区别看起来微妙,实际体验天差地别:

没有 Redis MCP(shell 方式):
  Agent → redis-cli HGETALL user:1001
        → 拿到 "name\nAlice\nage\n30" 这种纯文本
        → 自己猜这是 field/value 交替
        → 字段多了就乱

有了 Redis MCP:
  Agent → 调用 hash_get_all 工具
        → 拿到结构化 JSON:{"name":"Alice","age":30}
        → 直接当成对象分析

这道直连通道打通后,下面这些真实痛点全都能在对话里解决:

痛点 1:配置热更新要进服务器改
  → 线上配置存在 Redis 的 Hash 里
  → 改一个开关要 SSH 上去 redis-cli HSET
  → 现在让 Agent 直接读、分析、改,全程不离开对话框

痛点 2:缓存命中率下降但不知道是哪些 key 出问题
  → 几百万个 key,肉眼不可能看
  → 让 Agent SCAN 遍历 + 统计 key 前缀分布 + 找异常
  → 几秒钟给出"user:* 前缀占了 60% 内存,疑似泄漏"

痛点 3:会话过期策略不对,用户老被踢下线
  → 成千上万个 session key,TTL 各不相同
  → 让 Agent 抽样查 TTL 分布 + 找出没设过期的 key
  → 直接定位"这批 key 忘了设 EXPIRE"

Redis MCP 的设计哲学跟其他数据库 MCP 一脉相承:把"操作 Redis"变成 Agent 的原生能力,而不是让它通过 shell 间接摸。这样 Agent 才能真正看懂 Redis 里的数据结构、做出结构化分析、给出可执行的修改建议。本文接下来从核心能力、配置方式、三个实战场景、与 PostgreSQL MCP 的选型对比、安全注意事项、故障排查六个维度把它讲透。

Redis MCP 核心能力

Redis MCP 把 Redis 五大数据类型(String/Hash/List/Set/ZSet)和通用键空间操作都封装成了语义化的 MCP 工具。Agent 不用记命令语法,只要说"我要看这个 Hash 的所有字段",MCP 自然路由到对应工具。下表是完整能力清单:

String 类型操作

工具名功能对应 Redis 命令返回格式
set写入一个字符串键值SET key value"OK" 或错误
get读取一个字符串键的值GET key字符串值,不存在返回 nil
delete删除一个或多个键DEL key [key ...]被删除的键数量(整数)
expire给键设置过期时间(秒)EXPIRE key seconds1 成功 / 0 键不存在
ttl查看键的剩余生存时间TTL key秒数;-1 永不过期;-2 已过期
incr / decr自增 / 自减(计数器)INCR key / DECR key操作后的新值
exists判断键是否存在EXISTS key1 存在 / 0 不存在

String 是 Redis 最基础的结构,承载计数器、缓存值、简单配置等。一个典型用法是限流计数:

Agent 想知道某接口是否触发限流
  → get("rate_limit:user:1001")
  → "847"(已请求 847 次)
  → ttl("rate_limit:user:1001")
  → "3600"(窗口还剩 3600 秒)
  → 判断:接近阈值,建议告警

Hash 类型操作

工具名功能对应 Redis 命令返回格式
hash_set设置 Hash 中一个字段的值HSET key field value新增字段数(整数)
hash_get读取 Hash 中一个字段HGET key field字段值,不存在返回 nil
hash_get_all读取 Hash 的所有字段和值HGETALL key{"field1":"v1","field2":"v2"}
hash_delete删除 Hash 中的字段HDEL key field [field ...]删除的字段数
hash_fields列出 Hash 所有字段名HKEYS key字段名数组
hash_length查看 Hash 字段数量HLEN key字段数(整数)

Hash 是 Redis 里"对象存储"的主力——用户信息、商品详情、配置项都常存成 Hash,因为比 String 更省内存又支持字段级读写。一个典型场景:

用户资料存成 user:1001 这个 Hash
  → hash_get_all("user:1001")
  → {"name":"Alice","age":30,"email":"alice@x.com","vip":true}
  → Agent 直接当对象分析,不用解析文本

List 类型操作

工具名功能对应 Redis 命令返回格式
list_push_left从左端插入元素LPUSH key value [value ...]插入后列表长度
list_push_right从右端插入元素RPUSH key value [value ...]插入后列表长度
list_pop_left弹出左端元素LPOP key弹出的元素,空列表返回 nil
list_pop_right弹出右端元素RPOP key弹出的元素
list_range读取指定区间的元素LRANGE key start stop元素数组
list_length查看列表长度LLEN key长度(整数)

List 常用于消息队列、最近访问记录、待处理任务。比如查"最近 10 条登录记录":

list_range("recent_login:user:1001", 0, 9)
  → ["2026-09-01 10:23","2026-09-01 18:45","2026-09-02 09:12", ...]
  → Agent 拿到时间数组,能直接算登录频率、异常时段

Set 类型操作

工具名功能对应 Redis 命令返回格式
set_add向集合添加成员SADD key member [member ...]新增成员数
set_members返回集合所有成员SMEMBERS key成员数组
set_is_member判断元素是否在集合中SISMEMBER key member1 在 / 0 不在
set_remove移除集合中的成员SREM key member [member ...]移除的成员数
set_size查看集合成员数SCARD key成员数(整数)

Set 适合存"去重集合"——标签、在线用户、已读消息 ID 等:

set_members("online_users")
  → ["user:1001","user:1002","user:1003"]
  → 跟总用户数对比,得出在线率

ZSet(有序集合)操作

工具名功能对应 Redis 命令返回格式
zset_add添加成员及分数ZADD key score member [score member ...]新增成员数
zset_range按分数升序取区间成员ZRANGE key start stop [WITHSCORES]成员数组(可带分数)
zset_range_by_score按分数范围取成员ZRANGEBYSCORE key min max成员数组
zset_reverse_range按分数降序取区间ZREVRANGE key start stop成员数组
zset_score查看某成员的分数ZSCORE key member分数值
zset_rank查看某成员的排名ZRANK key member排名(从 0 开始)
zset_remove移除成员ZREM key member [member ...]移除数

ZSet 是排行榜、延迟队列、带优先级任务的核心结构:

zset_reverse_range("leaderboard:daily", 0, 9, withscores=true)
  → [{"member":"user:1001","score":8520}, {"member":"user:1002","score":7800}, ...]
  → Agent 直接生成 Top 10 榜单表格

通用键空间操作

工具名功能对应 Redis 命令返回格式
keys按模式匹配键名(危险,慎用)KEYS pattern键名数组
scan增量遍历键空间(推荐)SCAN cursor [MATCH p] [COUNT n] [TYPE t]{cursor, keys}
type查看键的数据类型TYPE keystring/hash/list/set/zset/none
info查看 Redis 服务器信息INFO [section]各项指标(内存、连接、命中)
dbsize查看当前库的键总数DBSIZE键数量(整数)
flushdb清空当前库(极度危险)FLUSHDB"OK"
memory_usage查看某键占用内存MEMORY USAGE key字节数

重要提醒:keys 在生产 Redis 上是高危命令——百万级键空间里跑一次 KEYS * 会让实例卡顿数秒甚至引发故障。Redis MCP 默认把它包装成了带保护的工具,但 Agent 仍可能主动调用。生产环境务必配置只读模式 + 命令黑名单(见后文安全章节),日常遍历请让 Agent 用 scan。

一图速查:五大类型 × 典型场景

我要做什么?                        用哪个类型?
─────────────────────────────────────────────
存一个简单值(配置/缓存)            → String
存一个对象(用户/商品/配置组)        → Hash
存一个有序队列/最近 N 条记录          → List
存一个去重集合(标签/在线用户)       → Set
存一个排行榜/带优先级的任务          → ZSet

Agent 拿到一个需求时,会先通过 type 工具看目标键是什么结构,再路由到对应类型的工具——这是 Redis MCP 比直接跑 redis-cli 显著更聪明的地方:它知道不同结构要用不同工具,不会拿 GET 去读 Hash 然后报错。

各客户端配置示例

Redis MCP 的安装跟其他官方 MCP Server 一样,一行 npx 搞定,不需要 clone、不需要编译。但不同客户端的配置文件位置和写法略有差异,而且 Redis 涉及连接串和权限,比 fetch 这种无状态 MCP 多几个必填项。下面逐个给出完整可用配置。

Claude Code(claude_desktop_config.json)

Claude Code 的 MCP 配置文件位置:

  • macOS:~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows:%APPDATA%\Claude\claude_desktop_config.json

最简配置(连本地 Redis,无密码):

{
  "mcpServers": {
    "redis": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-redis", "redis://localhost:6379"]
    }
  }
}

注意:Redis MCP 把连接串作为命令行参数直接传,而不是放 env——这跟 Postgres MCP(用 POSTGRES_CONNECTION_STRING 环境变量)的写法不同,容易踩坑。

带密码的 Redis(生产常见):

{
  "mcpServers": {
    "redis": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-redis",
        "redis://:your_password@redis-prod.internal:6379/0"
      ]
    }
  }
}

带 TLS 的 Redis(云托管如 Redis Labs、ElastiCache):

{
  "mcpServers": {
    "redis": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-redis",
        "rediss://:your_password@master.redis-cloud.example.com:6379/0"
      ]
    }
  }
}

redis:// 是明文,rediss:// 是 TLS 加密连接。生产环境必须用 rediss://,否则密码和命令都在网络上裸奔。

如果你已经有其他 MCP Server(比如 filesystem、github),合并进去:

{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem", "/Users/me/projects"]
    },
    "redis": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-redis", "redis://localhost:6379"]
    },
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": {
        "GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_xxxxxxxxxxxx"
      }
    }
  }
}

注意:修改配置文件后必须完全退出 Claude Code(不是关窗,是 Dock 右键退出 / Windows 任务栏退出),重新打开才生效。

Cursor(.cursor/mcp.json)

Cursor 把 MCP 配置放在项目根目录或用户目录的 .cursor/mcp.json:

  • 项目级:<项目根>/.cursor/mcp.json(只对该项目生效)
  • 用户级:~/.cursor/mcp.json(全局生效)

最简配置:

{
  "mcpServers": {
    "redis": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-redis", "redis://localhost:6379"]
    }
  }
}

想让 redis 在所有项目都可用,放用户级;想只对某个项目可用,放项目级。两者同名时项目级覆盖用户级。

连接远程带密码 Redis 的进阶写法:

{
  "mcpServers": {
    "redis": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-redis",
        "redis://:strong_password@10.0.0.5:6379/0"
      ],
      "env": {
        "REDIS_TLS_REJECT_UNAUTHORIZED": "0"
      }
    }
  }
}

自签证书的 TLS Redis 会因证书校验失败连不上,加 REDIS_TLS_REJECT_UNAUTHORIZED=0 跳过校验(仅内网自签场景用,公网别这么干)。

VS Code(settings.json)

VS Code 通过 GitHub Copilot Chat 或 Continue 等扩展支持 MCP。配置写在 settings.json:

  • macOS:~/Library/Application Support/Code/User/settings.json
  • Windows:%APPDATA%\Code\User\settings.json
  • Linux:~/.config/Code/User/settings.json

完整配置:

{
  "mcp.servers": {
    "redis": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-redis", "redis://localhost:6379"]
    }
  }
}

如果你用 Continue 扩展,配置在 ~/.continue/config.json:

{
  "mcpServers": {
    "redis": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-redis", "redis://localhost:6379"]
    }
  }
}

VS Code 多工作区隔离场景(不同项目连不同 Redis 实例):

{
  "mcp.servers": {
    "redis-dev": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-redis", "redis://localhost:6379/0"]
    },
    "redis-staging": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-redis",
        "redis://:staging_pass@staging.example.com:6379/0"
      ]
    }
  }
}

通过在对话里指明"查 staging Redis 里的…"让 Agent 路由到对应 Server,避免连错环境。

Trae(mcp config)

Trae 的 MCP 配置通过内置命令管理,也可以直接编辑配置文件。命令行方式:

# 添加 redis MCP Server(本地无密码)
trae mcp add redis -- npx -y @modelcontextprotocol/server-redis redis://localhost:6379

# 查看已配置的 MCP Server
trae mcp list

# 验证 redis 是否可用
trae mcp test redis

或者直接编辑配置文件 ~/.trae/mcp.json:

{
  "mcpServers": {
    "redis": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-redis", "redis://localhost:6379"]
    }
  }
}

带项目级配置的写法(.trae/mcp.json 放项目根目录):

{
  "mcpServers": {
    "redis": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-redis",
        "redis://:prod_pass@redis-prod.internal:6379/1"
      ]
    }
  }
}

注意连接串末尾的 /1——这是 Redis 的 db index。Redis 默认 16 个逻辑库(0-15),用 /0、/1 区分,能做轻量级环境隔离。

通用配置模板(一图速查)

客户端配置文件路径关键字段
Claude Code~/Library/Application Support/Claude/claude_desktop_config.jsonmcpServers.redis
Cursor.cursor/mcp.json(项目或用户级)mcpServers.redis
VS Codesettings.json 或 ~/.continue/config.jsonmcp.servers.redis 或 mcpServers.redis
Trae~/.trae/mcp.json 或 trae mcp addmcpServers.redis

核心配置统一是这三行(注意连接串作为 args 的最后一个元素):

"redis": {
  "command": "npx",
  "args": ["-y", "@modelcontextprotocol/server-redis", "redis://localhost:6379"]
}

记住这三行,搬到哪个客户端都能用。唯一需要改的就是那个连接串——把 redis:// 换成你的实际地址、密码、库号。

连接串格式速查

redis://[用户名:密码@]主机[:端口][/库号]
rediss://[用户名:密码@]主机[:端口][/库号]   ← TLS 加密版

示例:
redis://localhost:6379                            ← 本地无密码
redis://:p4ss@localhost:6379/0                      ← 本地带密码(用户名省略)
redis://:p4ss@10.0.0.5:6379/1                      ← 远程 db 1
rediss://:p4ss@master.redis-cloud.com:6379/0      ← 云托管 TLS
redis://default:long_token@redis.example.com:6379  ← ACL 用户名+密码(Redis 6+)

Redis 6 引入 ACL,支持"用户名+密码"而非传统"只有密码"。连接串格式是 redis://用户名:密码@主机,用户名留空时是默认的 default 用户。

三个实战场景

光看配置没感觉,下面三个场景演示 Redis MCP 真正能解决什么问题。每个场景都附完整步骤和可直接照抄的对话示例。

场景一:实时配置热更新

背景:你的微服务把功能开关、限流阈值、灰度比例等配置都存在 Redis 的一个 Hash 里(key 是 config:feature_flags),运行时从 Redis 读。现在产品说要临时把"评论审核"开关从手动改成自动,你要在不重启服务、不进服务器的前提下改这个值。

痛点对照:

没 Redis MCP:
  你:把 config:feature_flags 里的 comment_moderation 改成 auto
  → SSH 上生产机
  → redis-cli -h xxx
  > HSET config:feature_flags comment_moderation auto
  → 退出 SSH
  → 回到对话告诉 Agent 改完了

有 Redis MCP:
  你:把 config:feature_flags 里的 comment_moderation 改成 auto
  Agent:(hash_get 看当前值)→(hash_set 改值)→(hash_get 确认)→ 完成

完整步骤:

  1. 让 Agent 先读取当前配置 Hash,确认字段存在
  2. Agent 分析当前值,对比要改成的新值
  3. Agent 调用 hash_set 修改目标字段
  4. Agent 再 hash_get 确认改动生效
  5. Agent 报告改动前后对比

示例对话:

你:把 Redis 里 config:feature_flags 这个 Hash 的 comment_moderation
    字段从 manual 改成 auto。先读一下当前是什么,确认字段存在,
    再改,最后再读一遍确认。

Agent:
  好的,我先把当前配置读出来。

  [调用工具: hash_get_all]
  key: config:feature_flags

  [工具返回]
  {
    "search_enable": "true",
    "page_size": "20",
    "comment_moderation": "manual",
    "signup_captcha": "true",
    "rate_limit_per_min": "60",
    "gray_percentage": "0"
  }

  当前 comment_moderation = "manual",确认要改成 "auto"。修改中:

  [调用工具: hash_set]
  key: config:feature_flags
  field: comment_moderation
  value: auto

  [工具返回]
  1   ← 表示成功新增/更新 1 个字段

  再读一次确认:

  [调用工具: hash_get]
  key: config:feature_flags
  field: comment_moderation

  [工具返回]
  "auto"

  ✅ 改动完成。变更摘要:
     - 字段:comment_moderation
     - 原值:manual
     - 新值:auto
     - 其他字段未动
  服务读取 Redis 即生效,无需重启。

为什么这个场景重要:配置热更新是 Redis 作为配置中心的核心场景。传统做法要进服务器或开控制台,现在让 Agent 在对话里直接操作——重点是 Agent 自己遵守了"读-改-读确认"的安全流程,不会莽撞地直接 SET 然后以为改完了。这种结构化操作比手敲 redis-cli 更不容易出错。

进阶:让 Agent 在改之前先 info 看 Redis 健康、ttl 看配置键是否有过期策略(避免改完几秒后被清掉),分析更全面。

场景二:缓存数据分析和异常排查

背景:线上服务内存告警,Redis 实例内存占用从 2GB 涨到 5GB,但业务量没明显增长。你怀疑是某些 key 增长异常(缓存泄漏)。让 Agent 帮你遍历 key、统计分布、定位异常前缀。

痛点对照:

没 Redis MCP:
  你:帮我看看 Redis 里哪些 key 占内存多
  Agent:我没法连,你跑 SCAN 统计一下 key 前缀分布给我
  → 你写 Python 脚本,SCAN + 解析 + 统计,跑几分钟
  → 把输出口述给 Agent
  → Agent 凭你转述分析

有 Redis MCP:
  你:分析下 Redis 内存涨的原因,统计 key 前缀分布
  Agent:(SCAN 遍历)→(按前缀分组统计)→(找异常)→ 给结论

完整步骤:

  1. Agent 先 info memory 看总体内存
  2. Agent dbsize 看键总数
  3. Agent 用 scan 增量遍历,按前缀分组
  4. Agent 抽样 type + memory_usage 看各类型内存占比
  5. Agent 定位增长异常的前缀
  6. Agent 给出处置建议

示例对话:

你:Redis 内存从 2G 涨到 5G,但业务量没涨。帮我分析下是不是
    有 key 泄漏。先看总体情况,再 SCAN 遍历按前缀分组统计,
    最后抽样看下每类 key 占多少内存。

Agent:
  我先看 Redis 整体内存和键数量。

  [调用工具: info]
  section: memory

  [工具返回]
  used_memory:5.12GB
  used_memory_human:5.12GB
  used_memory_peak:5.30GB
  used_memory_dataset:4.80GB
  ...

  [调用工具: dbsize]

  [工具返回]
  842310   ← 84 万个 key

  总体:内存 5.12GB,键 84 万。下面开始 SCAN 遍历统计前缀分布。
  为避免一次性拉爆,我分批扫描,每批 COUNT=1000。

  [调用工具: scan] × 多次
  cursor: 0, count: 1000, match: *
  → 第一批拿到 cursor=2048 和 1000 个 key
  cursor: 2048, count: 1000
  → 第二批
  ...(共扫描 ~850 批)

  按 key 前缀(第一个冒号之前的部分)分组统计:

  | 前缀 | 数量 | 占比 |
  |------|------|------|
  | session: | 598200 | 71.0% |
  | cache:user: | 96500 | 11.5% |
  | cache:product: | 82300 | 9.8% |
  | rate_limit: | 41200 | 4.9% |
  | queue: | 18000 | 2.1% |
  | 其他 | 5110 | 0.7% |

  session: 前缀占了 71%,明显异常。抽样看下它们的 TTL:

  [调用工具: ttl] × 抽样 5 个 session key
  ttl("session:user:1001") → 86340   ← 约 24 小时
  ttl("session:user:abc23") → -1     ← ⚠️ 永不过期
  ttl("session:user:99f0") → -1      ← ⚠️ 永不过期
  ttl("session:user:42da") → -2      ← 已过期但未清理
  ttl("session:user:7c3b") → 86000

  [调用工具: memory_usage]
  key: session:user:abc23
  → 184 bytes

  异常定位:
  session: 前缀 60 万个 key,其中抽样发现约 30% TTL=-1(永不过期),
  估算有 ~18 万个 session key 没设过期,平均 184B,占用约 33MB 纯数据,
  但 Redis Hash 内部编码 + 元数据放大后实际占用更高。

  根因判断:
  代码里给 session 设值时漏了 EXPIRE。某些路径(比如静默登录)直接
  SET 但没调用 EXPIRE,导致这些 session 永不过期,越积越多。

  处置建议:
  1. 立即:SCAN 遍历 session:* 前缀,对 TTL=-1 的批量 EXPIRE 86400
  2. 根治:定位代码里 SET session 的位置,补 EXPIRE
  3. 监控:给 session: 前缀总数加告警,超 50 万触发

  要我帮你写个修复脚本,或者直接通过 MCP 批量给这些 key 设过期吗?

为什么这个场景重要:缓存泄漏是 Redis 最常见的线上故障,靠人工 SCAN 几十万 key 不现实。让 Agent 用 scan 增量遍历 + 抽样 ttl + 抽样 memory_usage 组合,能在几分钟内定位问题,这是手敲 redis-cli 几乎做不到的——Agent 不只是"跑命令",它还在跑完之后做结构化分析和根因推断。

注意:让 Agent 做 SCAN 遍历时务必让它用 count 控制每批大小(建议 500-1000),不要让它直接 keys *,否则会卡死生产实例。

场景三:会话存储巡检

背景:用户反馈"登录老是被踢下线"。你怀疑是 session 过期策略有问题——要么 TTL 太短,要么不同登录路径设置的 TTL 不一致。让 Agent 帮你巡检 session 存储,发现策略漏洞并修复。

痛点对照:

没 Redis MCP:
  你:用户老被踢下线,帮我查下 session 过期策略
  Agent:你帮我跑:
         KEYS session:*(限制 100 个)
         然后逐个 TTL,统计分布
  → 你手敲 + 写脚本,折腾半小时
  → 数据贴回来,Agent 看分布猜原因

有 Redis MCP:
  你:查 session 存储的 TTL 分布,找异常
  Agent:(抽样 session)→(统计 TTL 分布)→(发现双峰)→ 定位代码

完整步骤:

  1. Agent 抽样一批 session key
  2. Agent 逐个查 TTL,统计分布
  3. Agent 发现 TTL 出现多个不正常峰值(比如 3600s 和 86400s 各占一半)
  4. Agent 对比代码里不同登录路径的 TTL 设置
  5. Agent 定位不一致的路径
  6. Agent 修复策略(统一 TTL)

示例对话:

你:用户反馈登录后老被踢下线,怀疑 session TTL 策略不一致。
    帮我抽样 50 个 session key,查它们的 TTL 分布,找异常。

Agent:
  好的,我先 SCAN 找一批 session key。

  [调用工具: scan]
  cursor: 0, count: 100, match: session:*

  [工具返回]
  {
    "cursor": 3072,
    "keys": [
      "session:user:1001",
      "session:user:1002",
      ... (共 78 个匹配)
    ]
  }

  取前 50 个抽样查 TTL:

  [调用工具: ttl] × 50
  ...(省略中间输出)

  统计分布:

  | TTL 范围 | 数量 | 占比 | 推测来源 |
  |----------|------|------|----------|
  | 3000-3600s(约 1 小时) | 23 | 46% | web 登录路径 |
  | 82800-86400s(约 24 小时) | 19 | 38% | app 登录路径 |
  | -1(永不过期) | 5 | 10% | 异常 |
  | 其他 | 3 | 6% | - |

  发现双峰:46% 是 1 小时 TTL,38% 是 24 小时 TTL。
  问题:用户在 web 登录拿到的 session 只有 1 小时,
       在 app 登录有 24 小时。用户在 web 看一会儿就被踢,
       因为 web session 比 app 短 24 倍。

  代码定位(让 Agent 顺着线索找代码):

  你可能想知道哪条登录路径设了 1 小时。我建议在代码里搜:
  - "EXPIRE" 或 "expire" 后跟 3600
  - 或者搜 session 设置的位置

  要我用 Filesystem MCP 帮你搜一下代码里 session 设置的 TTL 吗?

你:好,帮我搜下代码

Agent:(切换到 Filesystem MCP)
  [调用工具: grep] pattern: "expire.*3600|3600.*expire"
  ... 

  找到 src/auth/web_login.js 第 42 行:
    await redis.set(`session:user:${userId}`, token, 'EX', 3600)
  找到 src/auth/app_login.js 第 38 行:
    await redis.set(`session:user:${userId}`, token, 'EX', 86400)

  根因确认:
  web_login.js 写死了 3600(1 小时),app_login.js 写死了 86400(24 小时)。
  建议统一成 86400,跟 app 对齐:

  // src/auth/web_login.js
  - await redis.set(`session:user:${userId}`, token, 'EX', 3600)
  + await redis.set(`session:user:${userId}`, token, 'EX', 86400)

  要我直接改吗?另外,现在线上还有 23 个 web session 即将过期,
  要我通过 Redis MCP 给它们续期到 24 小时吗?避免改代码到部署
  之间用户继续被踢。

为什么这个场景重要:会话过期策略不一致是用户登录态故障的常见根因,但靠人眼看代码很难发现两处 TTL 写得不一样。Agent 通过抽样 Redis 数据发现"双峰"分布,反向定位到代码差异——这是 Redis MCP 跟 Filesystem MCP、代码搜索组合的典型应用:先看运行时数据找异常,再回代码找根因。

进阶:修复代码后,让 Agent 再抽样一次确认 TTL 分布已经收敛到单一峰值,闭环验证。

Redis MCP vs PostgreSQL MCP:选型对比

很多人会问:既然 PostgreSQL MCP 也能让 Agent 查数据,为啥还要 Redis MCP? 答案是它俩解决的问题根本不在一个层面——一个是"持久化业务数据",一个是"运行时内存数据"。

先看核心差异:

维度Redis MCPPostgreSQL MCP
底层存储内存数据库(可选持久化)磁盘关系型数据库
数据模型五大结构(String/Hash/List/Set/ZSet)表 + 行 + 关系
查询方式按键名直取 / 结构操作SQL(SELECT/JOIN/聚合)
是否支持复杂查询❌ 不支持 JOIN/子查询✅ 完整 SQL
延迟量级微秒级(μs)毫秒级(ms)
数据量上限GB 级(受内存约束)TB 级(受磁盘约束)
持久化保证可选 RDB/AOF(可能丢秒级数据)WAL(强一致)
典型用途缓存/会话/配置/计数器/排行榜业务数据/订单/用户/交易
数据时效性短生命周期(秒-天)长生命周期(年-永久)
修改方式命令式(HSET/SADD)声明式(UPDATE/INSERT)
适合 Agent 做什么调缓存、查会话、改配置、巡检自然语言查数、生成报表、Schema 探索
读 vs 写的频率高频读写(缓存场景)读多写少(分析场景)
丢失影响一般可重建(缓存可回源)不可逆(业务数据)
典型场景"这个 key 的 TTL 还剩多少""上月销售按品类拆分"

什么时候用 Redis MCP:

✅ 查缓存命中情况、key 数量异常增长
✅ 改运行时配置(feature flag、限流阈值)
✅ 巡检会话存储(TTL 分布、过期策略)
✅ 看排行榜、在线用户集合等实时数据
✅ 分析限流计数器是否快达阈值
✅ 调试消息队列堆积(List 长度、ZSet 延迟任务)

什么时候用 PostgreSQL MCP:

✅ 自然语言查业务数据(销售、用户、订单)
✅ 探索陌生数据库的表结构和关系
✅ 生成数据报表、做复杂聚合分析
✅ 数据校验(重复、缺失、异常值)
✅ 慢查询分析、索引建议
✅ 跨表 JOIN 查询

一个简单的判断流程:

要查的数据在哪?
  ├─ 在 Redis 里(缓存/会话/配置)→ Redis MCP
  └─ 在 PostgreSQL 里(业务表)→ PostgreSQL MCP

不确定在哪?问自己:
  ├─ 这数据丢了能重建吗(如缓存)?能 → Redis
  └─ 丢了能接受吗?不能 → PostgreSQL

实际项目里两个一起用是最常见的搭配:

Redis MCP   → 查运行时状态(缓存/会话/限流)——"现在发生了什么"
Postgres MCP → 查业务数据(订单/用户)——"历史沉淀了什么"

比如一次完整故障排查:先 Redis MCP 看 session 缓存命中率,再 Postgres MCP 关联查这批用户的订单数据,两个 MCP 互补覆盖"运行时 + 持久化"两个维度。别想着二选一,它们解决的是不同时间尺度的数据问题。

安全注意事项

把 Redis MCP 接到生产环境之前,有几条必须防住的安全边界。Redis 跟 PostgreSQL 最大的不同是——Redis 默认无密码、默认监听所有网卡、KEYS * 能卡死实例,任何一个配置不当都可能酿成事故。

1. SSRF 与内网穿透风险

Redis MCP 让 Agent 能连任意 Redis 地址,这带来 SSRF(服务器端请求伪造)风险:

风险场景:
  攻击者诱导 Agent 连接内网 Redis
  → redis://192.168.0.10:6379
  → 读到内网敏感数据
  → 或通过 Redis 协议写 SSH 公钥到 authorized_keys(经典攻击)

防护:
  - Agent 配置的连接串写死,不允许 Agent 运行时改
  - 生产 Redis 强制密码 + ACL
  - Redis 监听绑 127.0.0.1 或内网 IP,不暴露公网
  - 防火墙限制只允许应用服务器访问 6379
  - 关闭 CONFIG / DEBUG 等危险命令(rename-command)
# redis.conf 关键安全配置
bind 10.0.0.5 127.0.0.1
requirepass YourStrongPassword
rename-command CONFIG ""
rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command DEBUG ""

2. KEYS 命令的生产风险

KEYS pattern 在大实例上是 Redis 最危险的命令之一——它是 O(N) 同步遍历,会阻塞整个 Redis 实例,百万级键空间里跑一次能让所有请求超时几秒甚至几十秒。

风险场景:
  Agent 主动调用 KEYS * 看"都有哪些 key"
  → Redis 卡顿 10 秒
  → 上游服务超时雪崩

防护:
  - 生产环境配置只读模式(后文详述)
  - 在 system prompt 里明确告诉 Agent:
    "禁止使用 KEYS 命令,遍历键空间一律用 SCAN"
  - Redis 服务端 rename-command KEYS "" 直接禁用(但 MCP 会报错)
  - 监控 KEYS 调用,发现立即告警

各客户端在 system prompt 里加规则的写法:

你连的是生产 Redis。规则:
1. 禁止使用 keys 命令,遍历一律用 scan + count
2. scan 的 count 不超过 1000
3. 任何写操作(DEL/FLUSHDB/FLUSHALL)前必须用户确认
4. 不执行 CONFIG / DEBUG / MONITOR 等管理命令
5. 单次返回结果不超过 1000 条

3. 生产环境只读模式

生产 Redis 的 MCP 连接默认应该是只读的——Agent 能查、能分析,但不能改、不能删。这需要 Redis 6+ 的 ACL 配合:

-- 创建只读用户(Redis 6+ ACL)
ACL SETUSER mcp_reader on +@read +scan +@connection -@write -@dangerous ~* >YourReadonlyPassword

-- 验证权限
AUTH mcp_reader YourReadonlyPassword
GET some_key       ← OK
SET some_key val   ← NOPERM 报错(被拒绝)
DEL some_key       ← NOPERM 报错

连接串用这个只读账号:

{
  "mcpServers": {
    "redis": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-redis",
        "redis://mcp_reader:YourReadonlyPassword@redis-prod.internal:6379/0"
      ]
    }
  }
}

即便 Agent 想 delete 或 flushdb,Redis 服务端会直接拒绝。这是比 system prompt 更硬的防线——ACL 是数据库层面强制的,Agent 绕不过去。

需要写权限的场景(如场景一的配置热更新),建议:

  • 起一个独立的可写连接,命名 redis-writer,按需启用
  • 写操作前让 Agent 先 SELECT 同条件预览,用户确认后再写
  • 关键 key(如 config:*)单独建 ACL,只允许 HSET 不允许 DEL
-- 配置热更新专用账号:只能 HSET config:*
ACL SETUSER mcp_config_writer on +hset ~config:* >ConfigWritePassword

4. 连接池与并发

Redis MCP Server 默认是单连接,高并发场景(多个对话同时用)会串行阻塞。生产环境部署建议:

方案 A:多实例(最简单)
  部署多个 Redis MCP Server 进程,每个客户端连一个
  → 横向扩容,互不阻塞

方案 B:前置代理
  在 Redis MCP 前面放一个 Redis 代理(如 Twemproxy、Codis)
  → 代理自己管连接池

方案 C:用 Redis Cluster 客户端
  部分实现支持 Cluster 模式连接串:
  redis://node1:6379,node2:6379,node3:6379?cluster=yes

个人开发机用默认单连接够用。生产环境多人共用时务必考虑并发,否则一个慢查询会拖累所有人。

5. 超时设置

Agent 调用 Redis MCP 默认没有显式超时,但 Redis 服务端有默认客户端超时(timeout 配置)。如果 Agent 跑一个慢操作(比如大 SCAN),可能被服务端踢掉。配置建议:

Redis 服务端:
  timeout 300          ← 客户端 5 分钟无操作断开
  slowlog-log-slower-than 10000  ← 慢查询阈值 10ms

Redis MCP 客户端侧:
  部分实现支持环境变量配置连接超时:
  REDIS_CONNECT_TIMEOUT_MS=5000
  REDIS_COMMAND_TIMEOUT_MS=30000

带超时的 Cursor 配置示例:

{
  "mcpServers": {
    "redis": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-redis", "redis://localhost:6379"],
      "env": {
        "REDIS_CONNECT_TIMEOUT_MS": "5000",
        "REDIS_COMMAND_TIMEOUT_MS": "30000"
      }
    }
  }
}

命令超时建议 30 秒,太短会让大 SCAN 中途断掉,太长会让 Agent 卡死等一个永远不返回的命令。

6. 数据脱敏

Agent 查 Redis 可能拿到敏感数据(手机号、token、密码 hash)。在 system prompt 里加脱敏规则:

你连的是生产 Redis。规则:
1. 输出包含 phone 字段时只显示前 3 后 4(138****1234)
2. 不输出 password / token / secret 类字段的值
3. 拿到 JWT 等长 token 只显示前 20 字符
4. 输出 session 数据时把 token 字段打码

7. 最小权限原则

默认只配只读 redis,不配 filesystem/github 等可写 MCP
  → Agent 能查 Redis 但改不了本地
需要写时再单独加可写连接或 filesystem,限定范围
  → 隔离爆炸半径

✗ 一个 MCP 配置同时连生产 Redis 可写 + filesystem 全盘
  → 一旦 Agent 被提示注入,能删库删文件
✓ 只读 Redis + 限定目录的 filesystem
  → 即使被注入,破坏有限

常见故障排查

现象原因解决
Agent 报 "redis tool not found"配置没生效重启客户端;检查 JSON 语法;查日志确认 server 启动
连接报 NOAUTH连接串没带密码或密码错检查 requirepass;连接串格式 redis://:密码@主机
连接报 WRONGPASS密码不对确认密码;注意 ACL 用户名要写 redis://用户名:密码@主机
连接报 MOVED / CROSSSLOT连的是 Cluster 但用了单机客户端用支持 Cluster 的实现;或直连某个节点单 key 操作
TLS 连接报证书错误自签证书校验失败加 REDIS_TLS_REJECT_UNAUTHORIZED=0(仅内网)
KEYS 后 Redis 卡顿KEYS 阻塞了实例立即停用 KEYS,改用 SCAN;rename KEYS 禁用
Agent 调用后超时网络/Redis 慢/慢查询调大命令超时;查 SLOWLOG 看慢命令
GET 返回 nil 但 key 明明存在类型不匹配用 type 看真实类型,Hash 用 hash_get
SCAN 遍历不完cursor 没循环到底让 Agent 循环直到 cursor=0
Agent 不主动用 redis提示不够明确对话里明确说"连 Redis 查…"
报 NOPERMACL 拒绝了操作检查 ACL 权限;只读账号不能写
内存返回 -1MEMORY USAGE 对大 key 超时改用 DEBUG OBJECT 估;或分批 SCAN
连接随机断开客户端超时太短调大 Redis timeout 配置;检查中间件 idle 超时

进阶用法:组合其他 MCP

Redis MCP 单用已经很强,但跟其他 MCP 组合起来威力翻倍。几个常见组合:

Redis + Filesystem:缓存数据落盘

你:把 Redis 里 config:feature_flags 的内容导出到 /tmp/config.json

Agent:
  1. [redis] hash_get_all("config:feature_flags") → 拿到 JSON
  2. [filesystem] 写入 /tmp/config.json
  → 完成

适合做配置备份、缓存数据离线分析。

Redis + Filesystem + Git:配置变更审计

你:改完 Redis 配置后,把这次改动记到 git 历史

Agent:
  1. [redis] 读取改动前的配置 Hash
  2. [redis] 执行修改
  3. [redis] 读取改动后的配置
  4. [filesystem] 把 diff 写到变更日志
  5. [git] 提交变更日志
  → 全程自动留痕

Redis + GitHub:故障关联代码

你:session TTL 不一致,帮我查代码哪里设的

Agent:
  1. [redis] 抽样 session 发现双峰 TTL
  2. [github] 搜代码里 EXPIRE / 'EX' 调用
  3. 定位到 src/auth/web_login.js 和 app_login.js
  → 数据异常反推到代码根因

Redis + Postgres:缓存与源数据对账

你:Redis 缓存的用户数据跟 Postgres 里一致吗?抽样对一下

Agent:
  1. [redis] SCAN 拿 10 个 cache:user:* key 的值
  2. [postgres] SELECT 同 ID 的用户行
  3. 逐字段对比
  4. 输出不一致的字段

适合做缓存与数据库的一致性巡检。

Redis + Memory:常用 key 模式记忆

你:记住我们项目的 session key 格式是 session:user:{userId}

Agent:
  1. [memory] 存下这个 key 模式
  2. 下次你说"查 session"时直接用这个模式 SCAN
  → 不用每次重新解释 key 命名规则

性能调优

在生产环境长期用 Redis MCP,有几个性能优化点:

1. SCAN 的批次大小

SCAN 的 COUNT 参数影响每批返回的 key 数。太小(如 10)要发很多次请求,太大(如 10000)每次卡顿久:

✓ 个人开发机:COUNT=500-1000
✓ 生产环境:COUNT=100-500(避免单次卡顿)
✗ COUNT=10000+:单次返回慢、占内存
✗ COUNT=1:要发几万次请求,慢到不可用

2. 并行查询

让 Agent 一次查多个 key 时,明确鼓励它并行:

你:并行查这 5 个 key 的 TTL
    session:user:1001
    session:user:1002
    ...

Agent:(5 次 ttl 并行调用,而不是串行)

MCP 协议支持工具并行调用,但 Agent 默认可能串行——明确说"并行"能让它一次发多个请求。

3. 选择性深查

不要让 Agent 对每个 key 都 memory_usage,先用 type 探一眼:

第 1 步:type(key) → 知道是 Hash/List/...
第 2 步:只对疑似异常的 key 跑 memory_usage
第 3 步:只对关注类型的 key 跑结构化读取

这种"先类型后内容"的分层查询能在百万级键空间里省 90% 以上的开销。

4. 避免大 key 全量读

✗ list_range("huge_queue", 0, -1)   ← 列表 100 万元素直接全拉,爆上下文
✓ list_range("huge_queue", 0, 99)    ← 分页拉
✓ 先 list_length 看总量,再决定怎么分页

让 Agent 在 system prompt 里加规则:任何 range 操作先看 length,超 1000 必须分页。

与其他"操作 Redis"方案对比

除了 Redis MCP,市面上还有几种让 Agent 操作 Redis 的方式,对比一下:

方案优点缺点适合
Redis MCP标准 MCP、结构化返回、类型路由需配置、部分实现功能有限日常调试、分析、配置管理
Shell/Bash MCP + redis-cli灵活、能跑任何命令输出纯文本难解析、权限过大临时一次性操作
自定义脚本完全可控每个问题写一次、不可复用特定高频任务
RedisInsight + 截图可视化强Agent 看不到、要人工转述人工排查
直接给 Agent redis-cli 命令复制不需要配置全程手动、易错极少用

典型组合:

日常调试分析:Redis MCP(90%)+ 偶尔 redis-cli(10% 罕见命令)
高频固定任务:封装成自定义脚本 + 定时跑
人工深度排查:RedisInsight 看可视化 + Redis MCP 做 Agent 分析

实际部署经验

下面是几个真实部署 Redis MCP 时遇到的"非技术"问题,提前知道能少走弯路:

问题 1:连接串里的特殊字符

密码里如果有 @、:、/ 等字符,连接串会解析错。必须 URL 编码:

密码:p@ss:w0rd
错误:redis://:p@ss:w0rd@host    ← @ 被当成主机分隔符
正确:redis://:p%40ss%3Aw0rd@host ← @ 编码成 %40,: 编码成 %3A

常见需要编码的字符:

@ → %40
: → %3A(密码里的冒号)
/ → %2F
# → %23
? → %3F

问题 2:Node 版本

Redis MCP 依赖较新的 Node(建议 Node 18+)。老版本跑不起来:

检查:node -v
要求:>= 18
升级:用 nvm install 20 && nvm use 20

问题 3:npx 缓存

每次启动 Agent 都跑 npx -y 会重新检查包,首次可能慢。预安装能加速:

# 全局预装一次
npm install -g @modelcontextprotocol/server-redis

# 配置改用全局版本(去掉 npx -y)
{
  "mcpServers": {
    "redis": {
      "command": "mcp-server-redis",
      "args": ["redis://localhost:6379"]
    }
  }
}

问题 4:跨平台路径

Windows 下配置文件路径要用双反斜杠或正斜杠:

// ✅ 正确
"C:/Users/me/.cursor/mcp.json"
"C:\\Users\\me\\.cursor\\mcp.json"

// ❌ 错误(单反斜杠会被转义)
"C:\Users\me\.cursor\mcp.json"

问题 5:团队共享配置

团队多人用同一项目,Redis MCP 配置应该提交到仓库吗?

推荐做法:
  - 项目级 .cursor/mcp.json 提交到仓库,连接串指向开发环境
  - 生产环境连接串各自维护(用户级配置)
  - 密码用环境变量,不硬编码进 JSON

.cursor/mcp.json 示例(提交到仓库,指向开发 Redis):

{
  "mcpServers": {
    "redis": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-redis", "redis://localhost:6379"]
    }
  }
}

带密码的版本(不提交,写在用户级):

{
  "mcpServers": {
    "redis": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-redis",
        "redis://:${REDIS_PASSWORD}@redis-prod.internal:6379/0"
      ],
      "env": {
        "REDIS_PASSWORD": "从 1Password / .env 读,不硬编码"
      }
    }
  }
}

一张图总结

Agent 要操作 Redis
        ↓
配置好 Redis MCP(5 分钟)
        ↓
对话里说"连 Redis 查…"
        ↓
Agent 调用对应类型工具
        ↓
   ┌────┴────┐
   │         │
读操作     写操作
   │         │
   ↓         ↓
查/分析    先预览后改(用户确认)
   │         │
   ↓         ↓
结构化返回   读-改-读确认
   ↓
Agent 基于真实数据回答
        ↓
   ┌────┴────┐
   │         │
数据异常   一切正常
   │         │
   ↓         ↓
回代码定位  收工
(Filesystem/GitHub MCP)

快速上手 Checklist

如果你刚拿到 Redis MCP,按这个清单一步步来:

□ 1. 确认 Node 版本 >= 18(node -v)
□ 2. 确认 Redis 实例可访问(redis-cli ping 测通)
□ 3. 准备 Redis 账号:
     - 开发环境可用 default(带密码)
     - 生产环境强烈建议建 ACL 只读账号
□ 4. 找到你客户端的配置文件位置(参考前文表格)
□ 5. 复制通用配置三行,改连接串:
    "redis": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-redis", "redis://localhost:6379"]
    }
□ 6. 重启客户端
□ 7. 跑一个测试对话:
    "查 Redis 里 dbsize 是多少"
    → Agent 调用 dbsize 工具 → 返回数字 → 成功
□ 8. 试一个真实场景:
    "SCAN 一遍 cache:* 前缀的 key,统计数量"
□ 9. 生产环境?配 ACL 只读账号
□ 10. 大实例?在 system prompt 里禁用 KEYS
□ 11. 要写操作?起独立的可写连接,按需启用
□ 12. 长期用?考虑加 Memory MCP 记 key 模式

常见问答

Q1:Redis MCP 能连 Redis Cluster 吗?

A:取决于具体实现。官方 @modelcontextprotocol/server-redis 主要面向单机/哨兵模式。Cluster 模式需要客户端支持 MOVED 重定向,部分社区 fork 版本支持。如果用 Cluster,建议:

  • 直连某个分片节点做单 key 操作(key hash 落在该分片)
  • 或前置一层代理(Twemproxy/Codis)屏蔽集群拓扑

Q2:连 Redis Sentinel 高可用集群怎么配?

A:Sentinel 模式连接串通常要列多个 Sentinel 地址。标准 MCP 暂不直接支持,变通做法:

  • 通过 HAProxy/VIP 把 Sentinel 透明化成一个虚拟 IP
  • MCP 连这个 VIP,VIP 自动路由到当前 master

Q3:Agent 会不会乱删 key?

A:会的,如果不约束。务必:

  • 生产环境用 ACL 只读账号(数据库层面强制)
  • system prompt 里加规则"任何写操作前必须用户确认"
  • 关键 key 用 ACL 限定只能 HSET 不能 DEL
  • FLUSHDB/FLUSHALL 在 redis.conf 用 rename-command 直接禁用

Q4:Redis MCP 能订阅 Pub/Sub 吗?

A:不能。MCP 工具是请求-响应模式,不适合长连接订阅。要看 Pub/Sub 消息流,需要专门的 MCP(部分社区实现)或用 Bash MCP 跑 redis-cli SUBSCRIBE。

Q5:Redis MCP 会缓存查询结果吗?

A:默认不缓存,每次调用都打 Redis。高频重复查同一 key 时可加 Memory MCP 显式缓存:

1. [memory] 查有没有存过这个 key 的值
2. 没有 → [redis] 查 → [memory] 存
3. 有 → 直接用记忆里的值

Q6:怎么限制 Agent 只能查特定前缀的 key?

A:ACL 支持按 key pattern 授权:

ACL SETUSER mcp_session_reader on +get +scan ~session:* >Password

这个账号只能操作 session:* 前缀的 key,查别的 key 直接 NOPERM。比 system prompt 更硬。

Q7:Redis MCP 和 RedisInsight 啥关系?

A:互补关系。RedisInsight 是 GUI 可视化工具,给人看;Redis MCP 是 API,给 Agent 用。日常排查可视化用 RedisInsight,让 Agent 自动化分析用 Redis MCP,两个一起最爽。

Q8:大 key(如 100 万元素的 List)会让 Agent 爆上下文吗?

A:会。务必在 system prompt 里加规则:

- 任何 range/get_all 操作前先 length 看总量
- 总量超 1000 必须分页
- 单次返回不超过 1000 个元素

否则 Agent 拉一个 100 万元素的 List 会瞬间塞爆上下文窗口。

结语

Redis MCP Server 是个"深而实"的 MCP Server——它不像 Fetch MCP 那样一行配置就能用,连接串、ACL、只读模式这些前置工作要花点心思;但一旦配好,它能让 Agent 真正看懂 Redis 里的数据结构、做结构化分析、给出可执行的修改建议。这一步打通后,缓存调试、配置热更、会话巡检这些原本要切应用、敲命令、写脚本才能干的事,全在对话里就能闭环。

它跟 PostgreSQL MCP 不是二选一,而是解决不同时间尺度数据问题的互补工具:PostgreSQL MCP 管"持久化的业务数据",Redis MCP 管"运行时的内存数据"。两个一起配,Agent 才能同时看到"过去沉淀了什么"和"现在发生了什么",覆盖后端数据的两个核心维度。

如果你刚开始接数据库类 MCP,建议顺序是:

  1. 先装 Filesystem MCP(让 Agent 能读写本地)
  2. 再装 Redis MCP(让 Agent 能看运行时状态)
  3. 最后装 PostgreSQL MCP(让 Agent 能查业务数据)

三个组合起来,Agent 的"数据视野"就完整了——本地文件、内存缓存、持久化数据库全覆盖,离一个真正好用的后端助手又近了一大步。


相关阅读:

相关推荐

查看更多 →
MCP数据库

Postgres MCP:让 AI 直接查询数据库,从自然语言到 SQL 到结果

Postgres MCP 让 Claude/Cursor 直接连数据库执行 SQL、看表结构、分析结果,全程不用切应用。本文拆解安装配置、读写权限分离、5 个实战场景(自然语言查数、Schema 探索、数据校验、报表生成、慢查询分析),以及只读模式与写权限的安全管控要点。

2026-08-16
#MCP#Postgres
MCP数据库

SQLite MCP:让 LLM 操作本地轻量数据库的官方服务器

SQLite MCP 是 ModelContextProtocol 官方维护的轻量级数据库集成服务器,基于 SQLite 文件数据库让 LLM 客户端能够查询数据、分析表结构、执行统计。无需数据库服务、无需网络配置,一个 .db 文件即可让 Claude Code、Cursor 等 MCP 客户端成为本地数据分析助理。本文梳理核心能力、与 Postgres MCP 的差异、各客户端接入与实战注意事项。

2026-08-09
#MCP#SQLite
MCP数据库

Postgres MCP:让 LLM 直接查询数据库、分析数据的官方服务器

Postgres MCP 是 ModelContextProtocol 官方维护的数据库集成服务器,通过 PostgreSQL 协议让 LLM 客户端能够查询数据、分析表结构、执行聚合统计。一条 npx 命令即可让 Claude Code、Cursor、VS Code 等 MCP 客户端成为数据库分析助理。本文梳理核心能力、安全配置、各客户端接入与实战注意事项。

2026-08-08
#MCP#PostgreSQL
MCP数据库

PostgreSQL MCP Server:让 AI 直接查询你的数据库

官方维护的 PostgreSQL MCP Server,支持让 AI 客户端连接数据库、查询表结构、执行 SQL、生成报表。

2026-07-28
#MCP#数据库