123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- import * as redis from 'redis';
- import { getLogger } from './loggers';
- const logger = getLogger('redis');
- export default class {
- private client: redis.RedisClient;
- private expireAfter: number;
- constructor(opt: IRedisConfig) {
- this.client = redis.createClient({
- host: opt.redisHost,
- port: opt.redisPort,
- });
- this.expireAfter = opt.redisExpireTime;
- logger.info(`loaded redis service at ${opt.redisHost}:${opt.redisPort}`);
- }
- private chatAsString = (chat: IChat) => `${chat.chatType}:${chat.chatID.toString()}`;
- public cacheContent = (contentId: string, content: string) =>
- new Promise<'OK'>((resolve, reject) =>
- this.client.set(`content/${contentId}`, content, 'EX', 3600 * 24, (err, res) =>
- err ? reject(err) : resolve(res)
- )
- ).then(res => {
- logger.debug(`cached content ${contentId}, result: ${res}`);
- }).catch((err: Error) => {
- logger.error(`failed to cache content ${contentId}, error: ${err}`);
- });
- public cacheForChat = (postId: string, target: IChat) => {
- const targetStr = this.chatAsString(target);
- return new Promise<'OK'>((resolve, reject) =>
- this.client.set(`sent/${targetStr}/${postId}`, 'true', 'EX', this.expireAfter, (err, res) =>
- err ? reject(err) : resolve(res)
- )
- ).then(res => {
- logger.debug(`cached post ${postId} for ${targetStr}, result: ${res}`);
- }).catch((err: Error) => {
- logger.error(`failed to cache post ${postId} for ${targetStr}, error: ${err}`);
- });
- };
- public getContent = (contentId: string) =>
- new Promise<string>((resolve, reject) =>
- this.client.get(`content/${contentId}`, (err, res) => err ? reject(err) : resolve(res))
- ).then(res => {
- logger.debug(`retrieved cached content ${contentId}, result: ${res}`);
- return res;
- }).catch((err: Error) => {
- logger.error(`failed to retrieve cached content ${contentId}, error: ${err}`);
- throw err;
- });
- public isCachedForChat = (postId: string, target: IChat) => {
- const targetStr = this.chatAsString(target);
- return new Promise<number>((resolve, reject) =>
- this.client.exists(`sent/${targetStr}/${postId}`, (err, res) => err ? reject(err) : resolve(res))
- ).then(res => {
- logger.debug(`retrieved status of post ${postId} for ${targetStr}, result: ${res}`);
- return Boolean(res);
- }).catch((err: Error) => {
- logger.error(`failed to retrieve status of post ${postId} for ${targetStr}, error: ${err}`);
- return false;
- });
- };
- }
|