Untitled
unknown
plain_text
a year ago
4.8 kB
5
Indexable
import { logger } from 'app/utils/logger'; import Redis from 'ioredis'; import { Service } from 'typedi'; @Service() class CacheService { private _client: Redis; private _keepAlive: any; private _connected = false; private _ready = false; private _error: any = undefined; // constructor() { void this.initialize(); } public getClient(): any { return this._client; } public setClient(client: Redis): void { this._client = client; } public getKeepAlive(): any { return this._keepAlive; } public setKeepAlive(keepAlive: any): void { this._keepAlive = keepAlive; } public getConnected(): boolean { return this._connected; } public setConnected(connected: boolean): void { this._connected = connected; } public getState(): boolean { return this._ready; } public setState(connected: boolean): void { this._ready = connected; } isConnected(): boolean { return this.getConnected(); } isReady(): boolean { return this.getState(); } public getError(): any { return this._error; } public setError(error: any): void { this._error = error; } hasError(): boolean { return this.getError() === undefined; } initialize = () => { const { REDIS_HOST, REDIS_PORT } = process.env; const host = REDIS_HOST; const port = parseInt(REDIS_PORT.replaceAll("'", '')); this.setClient( new Redis({ host: host, port: port, connectTimeout: 2500, maxRetriesPerRequest: 2, }) ); // this.getClient().on('connect', () => { this.setConnected(true); this.setError(null); // logger.info('Cache connected.'); }); this.getClient().on('ready', () => { this.setState(true); // logger.info('Cache is ready.'); }); this.getClient().on('end', () => { this.setConnected(false); this.setState(false); // logger.error('Cache is stopped.'); }); this.getClient().on('error', (err: Error) => { this.setConnected(false); this.setState(false); this.setError(err); // logger.error('Cache error : ' + err.stack); }); }; async getDataOnRedis(data: any) { try { let dataOnRedis = await this.getClient().get(data.key); return dataOnRedis; } catch (err: any) { throw new Error(err); } } async setDataOnRedis(data: any) { try { let addData = await this.getClient().set(data.key, data.value); return addData; } catch (err: any) { throw new Error(err); } } async pushOnRedis(data: any) { try { let pushDataOnRedis = await this.getClient().rpush(data.key, data.value); return pushDataOnRedis; } catch (err: any) { throw new Error(err); } } async deleteDataOnRedis(data: any) { try { let deletedData = await this.getClient().del(data.key); return deletedData; } catch (err: any) { throw new Error(err); } } async existsOnRedis(data: any) { try { let redisKeyExists = await this.getClient().exists(data.key); return redisKeyExists; } catch (err: any) { throw new Error(err); } } async getDataLengthOnRedis(data: any) { try { let redisDataLength = await this.getClient().llen(data.key); return redisDataLength; } catch (err: any) { throw new Error(err); } } async getDataLengthRangeOnRedis(data: any) { try { let redisDataLengthRange = await this.getClient().lrange(data.key, data.start, data.listLength); return redisDataLengthRange; } catch (err: any) { throw new Error(err); } } async setListDataOnRedis(data: any) { try { let setData = await this.getClient().lset(data.key, data.index, data.value); return setData; } catch (err: any) { throw new Error(err); } } async removeDataOnRedis(data: any) { try { let removedData = await this.getClient().lrem(data.key, data.start, data.listLength); return removedData; } catch (err: any) { throw new Error(err); } } async setDataOnRedisWithExpire(data: any, expireTime: number) { try { //expireTime in sec let addData = await this.getClient().set(data.key, data.value, 'EX', expireTime); return addData; } catch (err: any) { throw new Error(err); } } async scanStream(key: any) { try { const stream = await this.getClient().scanStream({ // only returns keys following the pattern of `cloudbedsSync:*` match: key, // returns approximately 100 elements per call count: 100, }); return stream; } catch (err: any) { throw new Error(err); } } } export default CacheService;
Editor is loading...
Leave a Comment