NextJS 太多的 redis 客户端

编程入门 行业动态 更新时间:2024-10-08 20:30:36

NextJS <a href=https://www.elefans.com/category/jswz/34/1770419.html style=太多的 redis 客户端"/>

NextJS 太多的 redis 客户端

简介

嘿:)

我为不和谐的网络仪表板创建了下一个应用程序,并使用 redis 作为我的数据库。


主要问题

每次我向 api 文件夹中的一个文档发出 axios 请求时,需要一个 redis 客户端,一个新的 redis 客户端连接到我的数据库。


我已经尝试了什么?

我在请求后使用 .quit() 进行了尝试,并尝试将 redis 添加到 SessionProvider 中。但是我遇到了问题,redis 属性在浏览器控制台/客户端上未定义。在我的 IDE 控制台/服务器端,它不是未定义的。

我想通过 SessionProvider 粘贴 redis 属性,但我每次都收到错误“找不到模块:dns”,因为我之前没有在创建 redis 客户端时查询 typeof window 是否未定义。


我的问题

  1. 为什么这不适用于 .quit()?
  2. 有没有更好/更简单的方法来防止将许多 redis 客户端连接到我的数据库?
  3. 你怎么处理这个?

感谢您的回答,对不起,当我把事情搞砸的时候,我是新来的,我想学习 :)


代码

我的_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 客户端

本文发布于:2024-05-13 16:19:17,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1760046.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:太多   客户端   NextJS   redis

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!