You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
1.3 KiB
58 lines
1.3 KiB
/** |
|
* @author Toru Nagashima |
|
* See LICENSE file in root directory for full license. |
|
*/ |
|
"use strict" |
|
|
|
const SKIP_TIME = 5000 |
|
|
|
/** |
|
* The class of cache. |
|
* The cache will dispose of each value if the value has not been accessed |
|
* during 5 seconds. |
|
*/ |
|
module.exports = class Cache { |
|
/** |
|
* Initialize this cache instance. |
|
*/ |
|
constructor() { |
|
this.map = new Map() |
|
} |
|
|
|
/** |
|
* Get the cached value of the given key. |
|
* @param {any} key The key to get. |
|
* @returns {any} The cached value or null. |
|
*/ |
|
get(key) { |
|
const entry = this.map.get(key) |
|
const now = Date.now() |
|
|
|
if (entry) { |
|
if (entry.expire > now) { |
|
entry.expire = now + SKIP_TIME |
|
return entry.value |
|
} |
|
this.map.delete(key) |
|
} |
|
return null |
|
} |
|
|
|
/** |
|
* Set the value of the given key. |
|
* @param {any} key The key to set. |
|
* @param {any} value The value to set. |
|
* @returns {void} |
|
*/ |
|
set(key, value) { |
|
const entry = this.map.get(key) |
|
const expire = Date.now() + SKIP_TIME |
|
|
|
if (entry) { |
|
entry.value = value |
|
entry.expire = expire |
|
} else { |
|
this.map.set(key, { value, expire }) |
|
} |
|
} |
|
}
|
|
|