Jon*_*800 6 javascript redis reactjs ioredis next.js
在我的 NextJS 应用程序中,我有多个 API 路由:
这些端点中的每一个都使用与 Redis 服务器的 Redis 连接get或putRedis 服务器中的数据。
我注意到控制台中出现错误,因为我与 Redis 服务器建立了太多连接。所以我想到了创建一个 Singleton 类并在该单例中连接到 Redis 服务器。getInstance()返回连接。
但我注意到我的单例是为每个 API 路由创建一次。NextJS 是否做了什么导致这种情况发生?
如何在 NextJS 应用程序中创建 1 个 Redis 连接实例,仅用于其中保存的 API 路由pages/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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
949 次 |
| 最近记录: |