[英]Using a Redis Singleton for NextJS API Routes
在我的 NextJS 应用程序中,我有多个 API 路由:
这些端点中的每一个都使用 Redis 连接在 Redis 服务器中get
或put
数据。
我注意到我的控制台出现错误,因为我与 Redis 服务器建立了太多连接。 所以我想创建一个 Singleton class 并在 singleton 中连接到 Redis 服务器一次。getInstance getInstance()
返回连接。
但我注意到我的 singleton 是每 API 路线创建一次。 NextJS 是否做了什么导致这种情况发生?
如何在 NextJS 应用程序中创建 Redis 连接的 1 个实例,仅用于pages/api
内的 API 路由? 我正在使用 ioredis 库。
您可以使用全局变量。 以下 redis 的设置应该适用于使用 redis 云免费实例的 nextJS,该实例在免费计划中最多有 30 个可用连接。
代码:
import * as redis from 'redis';
const REDIS_USERNAME = process.env.REDIS_USERNAME;
const REDIS_PASSWORD = process.env.REDIS_PASSWORD;
const REDIS_HOST = process.env.REDIS_HOST;
const REDIS_PORT = process.env.REDIS_PORT;
let redisClient;
let redisClientPromise;
if (process.env.NEXT_PUBLIC_NODE_ENV === 'development') {
if (!global._redisClientPromise) {
redisClient = redis.createClient({
url: `redis://${REDIS_USERNAME}:${REDIS_PASSWORD}@${REDIS_HOST}:${REDIS_PORT}`
});
redisClient.connect().then(() => {
console.info(
`NextJS Redis client connected..`
);
}).catch((error) => {
console.error(`[ERROR] Couldn't connect to Redis client: ${error}`);
});
global._redisClientPromise = redisClient;
}
redisClientPromise = global._redisClientPromise
} else {
redisClient = redis.createClient({
url: `redis://${REDIS_USERNAME}:${REDIS_PASSWORD}@${REDIS_HOST}:${REDIS_PORT}`
});
redisClient.connect().then(() => {
console.info(
`NextJS Redis client connected..`
);
}).catch((error) => {
console.error(`[ERROR] Couldn't connect to Redis client: ${error}`);
});
redisClientPromise = redisClient;
}
export default redisClientPromise;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.