我有一个简单的库文件,它 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客户端,但无济于事;这似乎拒绝使用我假设的单例模式。我做错了什么?
1条答案
按热度按时间cyvaqqii1#
查看基于HTTP的客户端:https://github.com/upstash/upstash-redis
它使用无状态的http连接,这解决了你的问题,也允许你在边缘运行它,不支持TCP