Untitled
unknown
plain_text
a year ago
2.0 kB
9
Indexable
var TimeLimitedCache = function() {
this.cache = {};
this.cacheSize = 0;
return null;
};
TimeLimitedCache.prototype.checkExpiry = function(key) {
if (Object.keys(this.cache).length > 0) {
console.log(this.cache);
for (const key of Object.keys(this.cache)) {
if (new Date().getTime() - this.cache[key].created > this.cache[key].expiry) {
delete this.cache[key];
if (this.cacheSize < 0) {
this.cacheSize = 0;
}
if (this.cacheSize > 0) {
this.cacheSize--;
}
}
}
}
}
/**
* @param {number} key
* @param {number} value
* @param {number} duration time until expiration in ms
* @return {boolean} if un-expired key already existed
*/
TimeLimitedCache.prototype.set = function(key, value, duration) {
this.checkExpiry();
let out = false;
if (this.cache[key] !== undefined) { out = true; this.cacheSize--; }
this.cache[key] = {
"value": value,
"created": new Date().getTime(),
"expiry": duration
}
this.cacheSize++;
return out;
};
/**
* @param {number} key
* @return {number} value associated with key
*/
TimeLimitedCache.prototype.get = function(key) {
this.checkExpiry();
if (Object.keys(this.cache).length > 0) {
if (new Date().getTime() - this.cache[key].created > this.cache[key].expiry) {
return -1;
}
return this.cache[key].value;
} else {
return -1;
}
};
/**
* @return {number} count of non-expired keys
*/
TimeLimitedCache.prototype.count = function() {
this.checkExpiry();
return this.cacheSize;
// return Object.keys(this.cache).length;
};
/**
* const timeLimitedCache = new TimeLimitedCache()
* timeLimitedCache.set(1, 42, 1000); // false
* timeLimitedCache.get(1) // 42
* timeLimitedCache.count() // 1
*/Editor is loading...
Leave a Comment