promise easy load
get(key, dbPromise, ...params) {
return new Promise((resolve, reject) => {
const redisTTL = 2400; // sec
const ramTTL = 1000; // microsec
const memoryResult = memoryCache.get(key);
if (memoryResult) {
if (!isJSON(memoryResult)) {
return resolve(memoryResult);
}
return resolve(JSON.parse(memoryResult));
}
return redisClient.get(key)
.then((cachedResult) => {
if (cachedResult) {
memoryCache.put(key, cachedResult, ramTTL);
if (!isJSON(cachedResult)) {
return resolve(cachedResult);
}
return resolve(JSON.parse(cachedResult));
}
return dbPromise(...params)
.then((dbResult) => {
redisClient.set(key, JSON.stringify(dbResult), 'EX', redisTTL);
memoryCache.put(key, JSON.stringify(dbResult), ramTTL);
return resolve(dbResult);
})
.catch(err => reject(err));
})
.catch(err => reject(err));
});
},
del(key, dbPromise, ...params) {
return Promise.all([
redisClient.del(key),
dbPromise(...params),
])
.then(([success, instance]) =>
Promise.resolve(instance))
.catch(err => Promise.reject(err));
},
redis hmset pass params
hmset(roomId, options, initValue = 0) {
const k = key.vote.options(roomId);
const optionArr = _.keys(options);
const params = [];
optionArr.forEach((option) => {
params.push(option);
params.push(initValue);
});
// optionA, 0, optionB, 0
return redisClient.hmset(k, ...params);
}