* Makes schemaCache clearning promise-based * Adds redis cache adapter for distributed systems * Adds redis service to travis * allow pg to fail
70 lines
1.4 KiB
JavaScript
70 lines
1.4 KiB
JavaScript
import redis from 'redis';
|
||
import logger from '../../logger';
|
||
|
||
function debug() {
|
||
logger.debug.apply(logger, ['RedisCacheAdapter', ...arguments]);
|
||
}
|
||
|
||
export class RedisCacheAdapter {
|
||
|
||
constructor(ctx) {
|
||
this.client = redis.createClient(ctx);
|
||
this.p = Promise.resolve();
|
||
}
|
||
|
||
get(key) {
|
||
debug('get', key);
|
||
this.p = this.p.then(() => {
|
||
return new Promise((resolve, _) => {
|
||
this.client.get(key, function(err, res) {
|
||
debug('-> get', key, res);
|
||
if(!res) {
|
||
return resolve(null);
|
||
}
|
||
resolve(JSON.parse(res));
|
||
});
|
||
});
|
||
});
|
||
return this.p;
|
||
}
|
||
|
||
put(key, value, ttl) {
|
||
value = JSON.stringify(value);
|
||
debug('put', key, value, ttl);
|
||
this.p = this.p.then(() => {
|
||
return new Promise((resolve, _) => {
|
||
this.client.set(key, value, function(err, res) {
|
||
resolve();
|
||
});
|
||
});
|
||
});
|
||
return this.p;
|
||
}
|
||
|
||
del(key) {
|
||
debug('del', key);
|
||
this.p = this.p.then(() => {
|
||
return new Promise((resolve, _) => {
|
||
this.client.del(key, function(err, res) {
|
||
resolve();
|
||
});
|
||
});
|
||
});
|
||
return this.p;
|
||
}
|
||
|
||
clear() {
|
||
debug('clear');
|
||
this.p = this.p.then(() => {
|
||
return new Promise((resolve, _) => {
|
||
this.client.flushall(function(err, res) {
|
||
resolve();
|
||
});
|
||
});
|
||
});
|
||
return this.p;
|
||
}
|
||
}
|
||
|
||
export default RedisCacheAdapter;
|