62 lines
1.1 KiB
JavaScript
62 lines
1.1 KiB
JavaScript
const DEFAULT_CACHE_TTL = 5 * 1000;
|
|
|
|
export class InMemoryCache {
|
|
constructor({ ttl = DEFAULT_CACHE_TTL }) {
|
|
this.ttl = ttl;
|
|
this.cache = Object.create(null);
|
|
}
|
|
|
|
get(key) {
|
|
const 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;
|