api_cache_redis.js 1.29 KB
'use strict';
const ws = require('../../lib/ws');
const redis = require('../../lib/redis');

class ApiCache {
    constructor() {
        this.redis = redis.client;
    }

    async setKey(key, value, ttl, force) {
        this._log(`setting ${key}`);

        let setRes = '';

        if (ttl && force) {
            setRes = await this.redis.setAsync(key, value, 'EX', ttl);
        }

        if (ttl && !force) {
            setRes = await this.redis.setAsync(key, value, 'NX', 'EX', ttl);
        }

        if (!ttl && force) {
            setRes = await this.redis.setAsync(key, value);
        }

        if (!ttl && !force) {
            setRes = await this.redis.setAsync(key, value, 'NX');
        }

        if (setRes === 'OK') {
            this._log(`set ${key} success`);
        } else {
            this._log(`set ${key} fail`);
        }

        return setRes;
    }

    delKey(key) {
        this._log(`deleting ${key}`);

        let delRes = this.redis.delAsync(key);

        if (delRes === 'OK') {
            this._log(`deleted ${key} success`);
        } else {
            this._log(`deleted ${key} fail`);
        }
    }

    _log(message) {
        ws.broadcast(`/api_cache/log`, {
            host: this.host,
            msg: message
        });
    }
}
module.exports = ApiCache;