UNPKG

nextjs-redis-cache

Version:

A Redis Cache for Next.js Framework that supports expiration after a given time and also compress the data in memory.

80 lines (79 loc) 3.29 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.cache = void 0; const zlib_1 = __importDefault(require("zlib")); const util_1 = __importDefault(require("util")); class RedisCache { constructor() { this.exists = (client, key) => __awaiter(this, void 0, void 0, function* () { try { const res = yield client.exists(key); if (res.toString() === '0') return false; return true; } catch (err) { console.error(err.message); return false; } }); this.delete = (client, keys) => __awaiter(this, void 0, void 0, function* () { try { const res = yield client.del(keys); return res; } catch (err) { console.error(err.message); } }); this.get = (client, key) => __awaiter(this, void 0, void 0, function* () { try { const res = yield client.get(key); if (!res) { // return null return res; } const buf = Buffer.from(res, 'base64'); const inflate = util_1.default.promisify(zlib_1.default.inflate); const decompressedData = yield inflate(buf); const result = JSON.parse(decompressedData.toString()); return result; } catch (err) { console.log(err.message); } }); this.set = (client, key, payload, options = {}) => __awaiter(this, void 0, void 0, function* () { try { const jsonData = JSON.stringify(payload); const deflate = util_1.default.promisify(zlib_1.default.deflate); const compressedData = (yield deflate(jsonData)).toString('base64'); const res = yield client.set(key, compressedData); if (res !== 'OK') return false; if (options.expireIn) { console.log('time'); yield client.expire(key, options.expireIn); } return true; } catch (err) { console.error(err.message); return false; } }); } } exports.cache = new RedisCache();