Skip to content

Commit dec1d6d

Browse files
committed
Adds redis cache adapter for distributed systems
1 parent 6f33e0f commit dec1d6d

File tree

4 files changed

+77
-1
lines changed

4 files changed

+77
-1
lines changed

.travis.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ env:
1616
- COVERAGE_OPTION='./node_modules/.bin/istanbul cover'
1717
matrix:
1818
- PARSE_SERVER_TEST_DB=postgres
19+
- PARSE_SERVER_TEST_CACHE=redis
1920
- MONGODB_VERSION=3.0.8
2021
- MONGODB_VERSION=3.2.6
2122
matrix:

spec/helper.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ var MongoStorageAdapter = require('../src/Adapters/Storage/Mongo/MongoStorageAda
2424
const GridStoreAdapter = require('../src/Adapters/Files/GridStoreAdapter').GridStoreAdapter;
2525
const FSAdapter = require('parse-server-fs-adapter');
2626
const PostgresStorageAdapter = require('../src/Adapters/Storage/Postgres/PostgresStorageAdapter');
27+
const RedisCacheAdapter = require('../src/Adapters/Cache/RedisCacheAdapter').default;
2728

2829
const mongoURI = 'mongodb://localhost:27017/parseServerMongoAdapterTestDatabase';
2930
const postgresURI = 'postgres://localhost:5432/parse_server_postgres_adapter_test_database';
@@ -101,6 +102,10 @@ var defaultConfiguration = {
101102
}
102103
};
103104

105+
if (process.env.PARSE_SERVER_TEST_CACHE === 'redis') {
106+
defaultConfiguration.cacheAdapter = new RedisCacheAdapter();
107+
}
108+
104109
let openConnections = {};
105110

106111
// Set up a default API server for testing with default configuration.
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
import redis from 'redis';
2+
import logger from '../../logger';
3+
4+
function debug() {
5+
logger.debug.apply(logger, ['RedisCacheAdapter', ...arguments]);
6+
}
7+
8+
export class RedisCacheAdapter {
9+
10+
constructor(ctx) {
11+
this.client = redis.createClient(ctx);
12+
this.p = Promise.resolve();
13+
}
14+
15+
get(key) {
16+
debug('get', key);
17+
this.p = this.p.then(() => {
18+
return new Promise((resolve, _) => {
19+
this.client.get(key, function(err, res) {
20+
debug('-> get', key, res);
21+
if(!res) {
22+
return resolve(null);
23+
}
24+
resolve(JSON.parse(res));
25+
});
26+
});
27+
});
28+
return this.p;
29+
}
30+
31+
put(key, value, ttl) {
32+
value = JSON.stringify(value);
33+
debug('put', key, value, ttl);
34+
this.p = this.p.then(() => {
35+
return new Promise((resolve, _) => {
36+
this.client.set(key, value, function(err, res) {
37+
resolve();
38+
});
39+
});
40+
});
41+
return this.p;
42+
}
43+
44+
del(key) {
45+
debug('del', key);
46+
this.p = this.p.then(() => {
47+
return new Promise((resolve, _) => {
48+
this.client.del(key, function(err, res) {
49+
resolve();
50+
});
51+
});
52+
});
53+
return this.p;
54+
}
55+
56+
clear() {
57+
debug('clear');
58+
this.p = this.p.then(() => {
59+
return new Promise((resolve, _) => {
60+
this.client.flushall(function(err, res) {
61+
resolve();
62+
});
63+
});
64+
});
65+
return this.p;
66+
}
67+
}
68+
69+
export default RedisCacheAdapter;

src/index.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import S3Adapter from 'parse-server-s3-adapter'
33
import FileSystemAdapter from 'parse-server-fs-adapter'
44
import InMemoryCacheAdapter from './Adapters/Cache/InMemoryCacheAdapter'
55
import NullCacheAdapter from './Adapters/Cache/NullCacheAdapter'
6+
import RedisCacheAdapter from './Adapters/Cache/RedisCacheAdapter'
67
import TestUtils from './TestUtils';
78
import { useExternal } from './deprecated';
89
import { getLogger } from './logger';
@@ -22,4 +23,4 @@ Object.defineProperty(module.exports, 'logger', {
2223
});
2324

2425
export default ParseServer;
25-
export { S3Adapter, GCSAdapter, FileSystemAdapter, InMemoryCacheAdapter, NullCacheAdapter, TestUtils, _ParseServer as ParseServer };
26+
export { S3Adapter, GCSAdapter, FileSystemAdapter, InMemoryCacheAdapter, NullCacheAdapter, RedisCacheAdapter, TestUtils, _ParseServer as ParseServer };

0 commit comments

Comments
 (0)