Next.js 13 - Redis路由处理器中的单例

zour9fqk  于 2023-06-21  发布在  Redis
关注(0)|答案(1)|浏览(183)

我有一个简单的库文件,它 Package 了一些redis功能:

import Redis from 'ioredis'

// TTL will be an hour
const TTL = 3600

console.log('In redis.ts, doing things')
const client = new Redis(process.env.REDIS_URL || '')

client.on('connect', () => {
  console.log('[REDIS] - Connection Established.')
})

const set = (k: string, v: string) => {
  return client.set(k, v, 'EX', TTL)
}

const get = (k: string) => {
  return client.get(k)
}

export { get, set }

然后,在一个简单的路由处理程序中,我做了如下操作:

import { NextResponse } from 'next/server'
import { set } from '@/lib/redis'

export async function POST(request: Request) {
  await set('myKey', JSON.stringify({ some: 'data' }))
  return NextResponse.json({ success: true })
}

每次调用该处理程序时,我的redis on事件都会触发,我的日志会显示上面的日志:

In redis.ts, doing things
[REDIS] - Connection Established.

我使用的是Upstash的免费层,它可以同时提供100个连接,在本地测试时,我很快就达到了这个限制。
我试着直接导出redis客户端,但无济于事;这似乎拒绝使用我假设的单例模式。我做错了什么?

cyvaqqii

cyvaqqii1#

查看基于HTTP的客户端:https://github.com/upstash/upstash-redis
它使用无状态的http连接,这解决了你的问题,也允许你在边缘运行它,不支持TCP

相关问题