如何在nextjs API中使用node redis,就像使用mongoDB一样?

w8rqjzmb  于 2023-01-08  发布在  Redis
关注(0)|答案(1)|浏览(228)

我试着在一个有自定义express服务器的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实验室服务器?

wpx232ag

wpx232ag1#

Lee Robinson(DevRel@Vercel)写了一篇关于在Next.js. https://leerob.io/blog/serverless-redis-nextjs中使用Redis的好文章。
完整示例如下: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));

相关问题