feat: add Redis plugin
Made-with: Cursor
This commit is contained in:
32
src/plugins/redis.ts
Normal file
32
src/plugins/redis.ts
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
import { FastifyInstance, FastifyPluginAsync } from 'fastify';
|
||||||
|
import { Redis } from 'ioredis';
|
||||||
|
import fp from 'fastify-plugin';
|
||||||
|
import { env } from '../config/env.js';
|
||||||
|
|
||||||
|
declare module 'fastify' {
|
||||||
|
interface FastifyInstance {
|
||||||
|
redis: Redis;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const redisPlugin: FastifyPluginAsync = async (app: FastifyInstance) => {
|
||||||
|
const redis = new Redis(env.REDIS_URL, {
|
||||||
|
maxRetriesPerRequest: 3,
|
||||||
|
retryStrategy(times: number) {
|
||||||
|
const delay = Math.min(times * 100, 3000);
|
||||||
|
return delay;
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
redis.on('error', (err: Error) => {
|
||||||
|
app.log.error({ err }, 'Redis connection error');
|
||||||
|
});
|
||||||
|
|
||||||
|
app.decorate('redis', redis);
|
||||||
|
|
||||||
|
app.addHook('onClose', async () => {
|
||||||
|
await redis.quit();
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export default fp(redisPlugin, { name: 'redis' });
|
||||||
Reference in New Issue
Block a user