NextJS中Redis客户端过多问题:如何复用单一客户端?
简介
大家好 :)
我开发了一个用于Discord网页控制面板的Next.js应用,使用Redis作为数据库。
核心问题
每当我向API目录中需要Redis客户端的文件发起Axios请求时,都会有一个新的Redis客户端连接到我的数据库。
已尝试的方案
- 请求完成后调用
.quit(),但问题依旧 - 尝试将Redis加入SessionProvider,结果浏览器控制台(客户端)中Redis属性为undefined,IDE控制台(服务端)中该属性正常可用
- 试图通过SessionProvider传递Redis属性,但如果创建Redis客户端前未判断
typeof window === 'undefined',就会触发“Module not found: dns”错误
我的疑问
- 为什么调用
.quit()无法解决这个问题? - 是否有更简单的方法来避免大量Redis客户端连接数据库?
- 你们通常是如何处理这类问题的?
感谢各位的解答,我是Next.js新手,正在学习中,若有表述不当之处请见谅 :)
代码示例
_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) }
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

