Feat: Redis cache #129
46
seasoned_api/src/cache/redis.js
vendored
Normal file
46
seasoned_api/src/cache/redis.js
vendored
Normal file
@@ -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;
|
||||
Reference in New Issue
Block a user