【问题标题】:Redis nextjs close redis connectionredis nextjs 关闭redis连接
【发布时间】:2022-11-07 13:32:27
【问题描述】:

我正在使用iron-session 来处理我的 nextjs 应用程序上的会话,但有些会话太大,所以我只使用iron-session 创建了一个密钥,并使用 Redis 获取结果。

我有一个非常基本的连接器

import { createClient } from 'redis';
import { logError } from './logger';

const client = createClient({ url: process.env.REDIS_URL });

client.on('error', (error) => {
    logError(error)
});

export async function connect() {
    if (!client.isOpen) await client.connect()
    return client
}

但是我有很多Socket closed unexpectedly 错误,应该是因为我从不调用quit 函数。

我不知道Redis服务器一直出现这种错误是不是一个大问题,如果不是,我可以忽略它。 另一种解决方案是在我的apigetServerSideProps 的末尾调用quit,它们正在使用来自Redis 的会话,但我发现它并非一尘不染,这将是很多代码和复杂性

【问题讨论】:

  • 程序在哪里运行?你能详细说明运行时环境吗?它是无服务器的吗?也许它只在被调用时被调用。如何在连接丢失时重新建立连接(重试连接)?
  • 这是因为您的 redis 连接也尝试在客户端进行连接。客户端不支持 redis 连接,您必须仅在服务器端初始化/连接到 redis。
  • Redis 仅调用 API 路由而不是客户端
  • 这是否回答了您的问题:Node.js: Closing all Redis clients on shutdown

标签: redis next.js


【解决方案1】:

您应该确保在client.on('error') 之后执行client.connect()

从您拥有的代码来看,它有可能在没有client.on('error') 的情况下首先注册client.connect()。你可以看到这个关于处理错误的线程。

https://github.com/redis/node-redis/issues/1985#issuecomment-1116865925

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-16
    • 2017-06-12
    • 2014-04-18
    • 2020-11-08
    • 2012-07-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多