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
JavaScript
;
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();