From f37786aa764ea29686b21ce1361059500a8681bd Mon Sep 17 00:00:00 2001 From: KevinMidboe Date: Fri, 21 Feb 2020 18:11:39 +0100 Subject: [PATCH] Redis cache script with get and set functions. This replaces old way of caching to sqlite. Still have same functionality, so users of old cache functions just need to rename their import. --- seasoned_api/src/cache/redis.js | 46 +++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 seasoned_api/src/cache/redis.js diff --git a/seasoned_api/src/cache/redis.js b/seasoned_api/src/cache/redis.js new file mode 100644 index 0000000..c7b1266 --- /dev/null +++ b/seasoned_api/src/cache/redis.js @@ -0,0 +1,46 @@ +const redis = require("redis") +const client = redis.createClient() + +class Cache { + /** + * Retrieve an unexpired cache entry by key. + * @param {String} key of the cache entry + * @returns {Promise} + */ + get(key) { + return new Promise((resolve, reject) => { + client.get(key, (error, reply) => { + if (reply == null) { + reject() + } + + resolve(JSON.parse(reply)) + }) + }) + } + + /** + * Insert cache entry with key and value. + * @param {String} key of the cache entry + * @param {String} value of the cache entry + * @param {Number} timeToLive the number of seconds before entry expires + * @returns {Object} + */ + set(key, value, timeToLive = 10800) { + const json = JSON.stringify(value); + client.set(key, json, (error, reply) => { + if (reply == 'OK') { + + // successfully set value with key, now set TTL for key + client.expire(key, timeToLive, (e) => { + if (e) + console.error('Unexpected error while setting expiration for key:', key, '. Error:', error) + }) + } + }) + + return value + } +} + +module.exports = Cache;