* Adding Caching Adapter, allows caching of _Role and _User queries.
This commit is contained in:
66
src/Adapters/Cache/InMemoryCache.js
Normal file
66
src/Adapters/Cache/InMemoryCache.js
Normal file
@@ -0,0 +1,66 @@
|
||||
const DEFAULT_CACHE_TTL = 5 * 1000;
|
||||
|
||||
|
||||
export class InMemoryCache {
|
||||
constructor({
|
||||
ttl = DEFAULT_CACHE_TTL
|
||||
}) {
|
||||
this.ttl = ttl;
|
||||
this.cache = Object.create(null);
|
||||
}
|
||||
|
||||
get(key) {
|
||||
let record = this.cache[key];
|
||||
if (record == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// Has Record and isnt expired
|
||||
if (isNaN(record.expire) || record.expire >= Date.now()) {
|
||||
return record.value;
|
||||
}
|
||||
|
||||
// Record has expired
|
||||
delete this.cache[key];
|
||||
return null;
|
||||
}
|
||||
|
||||
put(key, value, ttl = this.ttl) {
|
||||
if (ttl < 0 || isNaN(ttl)) {
|
||||
ttl = NaN;
|
||||
}
|
||||
|
||||
var record = {
|
||||
value: value,
|
||||
expire: ttl + Date.now()
|
||||
}
|
||||
|
||||
if (!isNaN(record.expire)) {
|
||||
record.timeout = setTimeout(() => {
|
||||
this.del(key);
|
||||
}, ttl);
|
||||
}
|
||||
|
||||
this.cache[key] = record;
|
||||
}
|
||||
|
||||
del(key) {
|
||||
var record = this.cache[key];
|
||||
if (record == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (record.timeout) {
|
||||
clearTimeout(record.timeout);
|
||||
}
|
||||
|
||||
delete this.cache[key];
|
||||
}
|
||||
|
||||
clear() {
|
||||
this.cache = Object.create(null);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export default InMemoryCache;
|
||||
Reference in New Issue
Block a user