feat: implement Redis client and plugin with basic operations

This commit is contained in:
Boris D
2025-09-22 16:50:03 +03:00
parent 5fbaca4659
commit 51f8b0d773
3 changed files with 66 additions and 0 deletions

View File

@ -9,4 +9,40 @@ export class RedisClient {
constructor(private readonly redisService: RedisService) { constructor(private readonly redisService: RedisService) {
this.redis = this.redisService.getOrThrow(); this.redis = this.redisService.getOrThrow();
} }
async set(
key: string,
value: string,
expireInSeconds?: number
): Promise<"OK" | null> {
if (!this.redis) {
return null;
}
if (expireInSeconds) {
return await this.redis.set(key, value, "EX", expireInSeconds);
}
return await this.redis.set(key, value);
}
async get(key: string): Promise<string | null> {
if (!this.redis) {
return null;
}
return await this.redis.get(key);
}
async del(key: string): Promise<number | null> {
if (!this.redis) {
return null;
}
return await this.redis.del(key);
}
getClient(): Redis | null {
return this.redis;
}
} }

View File

@ -1,5 +1,7 @@
import { DatabasePlugin } from "./plugins/database.plugin"; import { DatabasePlugin } from "./plugins/database.plugin";
import { RedisPlugin } from "./plugins/redis.plugin";
export const PluginClass = { export const PluginClass = {
DATABASE: DatabasePlugin, DATABASE: DatabasePlugin,
REDIS: RedisPlugin,
}; };

View File

@ -0,0 +1,28 @@
import Redis from "ioredis";
import { Plugin } from "../plugin.class";
export class RedisPlugin extends Plugin {
constructor(name: string, private redisClient: Redis) {
super(name);
}
static init(
name: string,
config: { host: string; port: number }
): RedisPlugin {
const redisClient = new Redis({
host: config.host,
port: config.port,
});
return new RedisPlugin(name, redisClient);
}
async run(): Promise<Redis> {
return this.redisClient;
}
onFinish(): void {
this.redisClient.quit();
}
}