rache
Version:
Random-eviction cache
106 lines (58 loc) • 2.61 kB
Markdown
global cache-size limit on all the caches derived from it.
Useful when you have many caches and want to limit their memory usage as a whole, instead of per cache.
The `get` and `set` operations as well as `delete` (and cache eviction) take constant time.
```
npm i rache
```
```
const Rache = require('rache')
const cache = new Rache({ maxSize: 3 })
const cache2 = cache.sub()
const cache3 = cache.sub()
cache.set('key', 'value')
cache2.set('key', 'otherValue')
cache3.set('some', 'thing')
// cache 1 is a separate cache from cache2 and cache3
console.log('cached:', cache.get('key')) // 'value'
// But they share the same global size
console.log(cache.globalSize, 'of', cache.maxSize) // 3 of 3
cache.set('key2', 'another value')
// The cache was full, so one of the existing 3 entries got evicted
console.log(cache.globalSize, 'of', cache.maxSize) // 3 of 3
```
Create a new cache.
`maxSize` is the maximum amount of entries globally, across this cache and all derived caches (derived with `cache.sub()` or `Rache.from(cache)`).
#### `const subCache = cache.sub()`
Create a new cache which shares the global memory limit with the original cache.
Create a new rache instance.
If an existing cache is passed in, it will create a sub-cache (equivalent to `aCache = cache.sub()`).
Otherwise (if no `cache` or a falsy value is passed in), it will create a new cache (equivalent to `aCache = new Rache()`).
#### `cache.globalSize`
The current amount of entries across all caches.
#### `cache.maxSize`
The maximum amount of entries across all caches.
#### `cache.size`
The amount of entries in this specific cache.
#### `cache.set(key, value)`
Set the key to the given value.
If the global cache size was at the limit, a random old entry is evicted from the cache.
#### `cache.delete(key)`
Delete the entry corresponding to `key`, if any.
Returns `true` if an entry was deleted, `false` otherwise.
#### `cache.get(key)`
Returns the value corresponding to the given key, or `undefined` if there is none.
#### `cache.keys()`
Returns an iterator over the keys of this particular cache.
#### `cache.values()`
Returns an iterator over the values of this particular cache.
#### `cache.clear()`
Clear all entries from this particular cache.
After clearing, new entries can again be added to the cache.
#### `cache.destroy()`
Destroys the cache. The cache should no longer be used after it has been destroyed.
A random-eviction cache which imposes a