太多的 redis 客户端"/>
NextJS 太多的 redis 客户端
简介
嘿:)
我为不和谐的网络仪表板创建了下一个应用程序,并使用 redis 作为我的数据库。
主要问题
每次我向 api 文件夹中的一个文档发出 axios 请求时,需要一个 redis 客户端,一个新的 redis 客户端连接到我的数据库。
我已经尝试了什么?
我在请求后使用 .quit() 进行了尝试,并尝试将 redis 添加到 SessionProvider 中。但是我遇到了问题,redis 属性在浏览器控制台/客户端上未定义。在我的 IDE 控制台/服务器端,它不是未定义的。
我想通过 SessionProvider 粘贴 redis 属性,但我每次都收到错误“找不到模块:dns”,因为我之前没有在创建 redis 客户端时查询 typeof window 是否未定义。
我的问题
- 为什么这不适用于 .quit()?
- 有没有更好/更简单的方法来防止将许多 redis 客户端连接到我的数据库?
- 你怎么处理这个?
感谢您的回答,对不起,当我把事情搞砸的时候,我是新来的,我想学习 :)
代码
我的_app.js:
import '@/styles/globals.css'
import '@/styles/custom.css'
import { SessionProvider } from "next-auth/react"
export default function App({
Component, pageProps: { session, ...pageProps }
}) {
return (
<SessionProvider session={session}>
<Component {...pageProps}/>
</SessionProvider>
)
}
我的connection.js:
import getConfig from 'next/config';
const { serverRuntimeConfig } = getConfig();
const { REDIS_HOST, REDIS_PORT, REDIS_PASSWORD } = serverRuntimeConfig;
let redis = null;
if (!redis) {
const Redis = require('ioredis');
redis = new Redis({
host: REDIS_HOST,
port: REDIS_PORT,
password: REDIS_PASSWORD
});
}
export default redis
API 文件夹中的 addItemToBlacklist.js:
import client from '../../database/connection'
const addToBlacklist = async (nick) => {
client.rpush(['blacklist', nick]).then(() => {
client.quit();
});
};
export default async function handler(req, res) {
console.log(req.query.addnick)
const nick = req.query.addnick;
await addToBlacklist(nick);
res.status(200).json({ status: "OK" });
}
来自我的 BlacklistCard.js 的 Axios 请求:
const addNick = (props) => {
axios.post("/api/addItemToBlacklist?addnick=" + props)
}
回答如下:
您目前正在对每个请求调用 quit() 方法,这会导致您的 Redis 客户端与服务器断开连接。然后,当有新请求进来时,会创建一个新的 Redis 客户端实例。要解决此问题,您应该删除
quit()
方法以防止在每次请求时与Redis服务器断开连接。
但是,如果您仍想在每次请求时连接和断开与 Redis 服务器的连接,则应该在请求中而不是在模块级别创建一个新连接。
这里是一个示例代码:
const addToBlacklist = async (nick) => {
const redis = new Redis({
host: REDIS_HOST,
port: REDIS_PORT,
password: REDIS_PASSWORD
});
await redis.rpush('blacklist', nick);
redis.quit();
};
更多推荐
NextJS 太多的 redis 客户端
发布评论