node.js - 如何以与使用 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 实验室服务器?
解决方案
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));
推荐阅读
- flutter - 图标作为“类别类型”作为表单输入不更新 UI 以显示用户选择
- php - 这种方法如何排除0?
- autodesk-forge - BIM 360 协作文件未显示在查看器上
- json - 向 API 发出请求并解析响应
- vue.js - 在 Vuex 模块中添加一个复杂的对象,该对象在内部管理其状态
- python - 我收到此错误 SyntaxError: 'break' outside loop
- javascript - 过滤结果页面上的响应结果
- css - Bootstraps css 样式未在 Angular 中应用或覆盖
- python - 如何从格式不佳的 CSV 中提取数据框
- javascript - 反应颜色无法读取未定义的属性“值”