Node.js/GraphQL应用集成Redis缓存时Redis服务器连接报错
解决Apollo Engine连接Redis缓存的本地OSX环境报错问题
嘿,我看你在本地OSX环境搭建Node.js/GraphQL应用,用Apollo Engine集成Redis做缓存时碰到了连接报错的问题。结合你给出的配置代码,咱们一步步排查并解决这些可能的坑:
1. 先修正Redis连接URL的格式问题
你当前配置里的http://127.0.0.1:6379/acme-store存在两个明显错误:
- Redis默认使用TCP协议而非HTTP,正确的协议前缀是
redis:// - Redis的数据库指定用数字索引(默认0-15),不是路径格式的
/acme-store
举个正确的URL示例:如果用默认的db 0,就是redis://127.0.0.1:6379;如果要指定db 1,就是redis://127.0.0.1:6379/1。
2. 确认Redis服务在本地正常运行
在OSX终端里执行以下命令验证:
- 启动Redis服务(如果没启动的话):
brew services start redis(用Homebrew安装的情况) - 测试连接:
redis-cli ping,如果返回PONG说明服务正常运行。
3. 修正Apollo Engine的完整配置代码
把URL格式改对,同时补全queryCache里的store名称,修正后的代码如下:
const engine = new ApolloEngine({ apiKey: '<apollo-engine-api-key>', origins: [{ supportsBatch: true, requestTimeout: '60s', }], stores: [ { name: 'acme-store', memcache: { url: ['redis://127.0.0.1:6379'], // 修正为Redis协议格式 keyPrefix: 'acme' } } ], queryCache: { publicFullQueryStore: 'acme-store' // 完整指定咱们定义的store名称 } });
4. 检查依赖是否齐全
确保你已经安装了Apollo Engine和Redis客户端依赖,在项目根目录执行:
npm install apollo-engine ioredis
5. 排查OSX防火墙拦截问题
有时候本地防火墙会拦截Redis的6379端口,你可以暂时关闭防火墙测试,或者在「系统偏好设置」→「安全与隐私」→「防火墙」里允许Redis的网络连接权限。
如果还是报错,记得看Node.js控制台的详细错误日志,比如connection refused(服务没启动)、invalid URL(格式错误)这类信息,能帮你更快锁定问题。
内容的提问来源于stack exchange,提问作者kallada
相关产品推荐
相关产品推荐

