首页 > 解决方案 > 如何以与使用 mongoDB 相同的方式在 nextjs api 中使用节点 redis?

问题描述

我正在尝试在具有自定义快速服务器的 nextJs API 中使用 Redis。我为 Redis 创建了一个 util 文件,以便连接到 Redis 实验室,就像我对 mongodb 所做的那样。问题是,当我尝试使用client.Hset控制台时,会不断向我发送错误消息econ refused,但我也确保当 Redis 连接时,控制台会记录一个字符串。所以控制台会同时记录 和 的econ refused错误connected to redis。这就是我的 util 文件的样子:

/* ------ connecting to redis ------ */
const redis = require('redis');
const { promisify } = require('util');
const client = redis.createClient({
    host: process.env.REDIS_HOSTNAME,
    port: process.env.REDIS_PORT,
    password: process.env.REDIS_PASSWORD
});
client.on('connect', ()=>{
  console.log('connected to redis')
})
/* promisifying redis in order to use async functionality */
const redisHget = promisify(client.hget).bind(client)
const redisHset = promisify(client.hset).bind(client)

module.export = {redisHget, redisHset}

似乎每次我调用 API 时,它都会重新连接到 Redis。我可以知道是否有一种方法可以像使用 MongoDB 一样通过创建和导入集合来使用 redis,这样它就不会不断重新连接到 redis 实验室服务器?

标签: node.jsmongodbredisnext.js

解决方案


Lee Robinson (DevRel @ Vercel),写了一篇关于在 Next.js 中使用 Redis 的好文章。https://leerob.io/blog/serverless-redis-nextjs

在此处完成示例:https ://github.com/vercel/next.js/blob/canary/examples/with-redis/README.md

片段:

# env.local
REDIS_URL=redis://:password@endpoint:port

我们将使用ioredis,一个支持 async/await 的 Node.js Redis 客户端来连接 Redis。

// lib/redis.js
import Redis from 'ioredis';

const redis = new Redis(process.env.REDIS_URL);

export default redis;

pages/在或pages/api/中使用它

import redis from '@/lib/redis';

const value = JSON.parse(await redis.hget('feedback', id));

推荐阅读