You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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”错误

我的疑问
  1. 为什么调用.quit()无法解决这个问题?
  2. 是否有更简单的方法来避免大量Redis客户端连接数据库?
  3. 你们通常是如何处理这类问题的?

感谢各位的解答,我是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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 18:32:55