Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/arbazsiddiqui/lru-cache-node
A lighting fast cache manager for node with least-recently-used policy.
https://github.com/arbazsiddiqui/lru-cache-node
cache hacktoberfest lru lru-cache mru node-cache
Last synced: 2 months ago
JSON representation
A lighting fast cache manager for node with least-recently-used policy.
- Host: GitHub
- URL: https://github.com/arbazsiddiqui/lru-cache-node
- Owner: arbazsiddiqui
- License: mit
- Created: 2018-04-18T08:55:47.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2023-03-06T13:29:55.000Z (over 1 year ago)
- Last Synced: 2024-07-22T19:57:27.984Z (2 months ago)
- Topics: cache, hacktoberfest, lru, lru-cache, mru, node-cache
- Language: JavaScript
- Homepage:
- Size: 642 KB
- Stars: 118
- Watchers: 5
- Forks: 8
- Open Issues: 4
-
Metadata Files:
- Readme: readme.md
- License: LICENSE
Awesome Lists containing this project
README
# lru-cache-node
[![Build Status](https://travis-ci.org/arbazsiddiqui/lru-cache-node.svg?branch=master)](https://travis-ci.org/arbazsiddiqui/lru-cache-node)
[![codecov](https://codecov.io/gh/arbazsiddiqui/lru-cache-node/branch/master/graph/badge.svg)](https://codecov.io/gh/arbazsiddiqui/lru-cache-node)
[![npm](https://img.shields.io/npm/dt/lru-cache-node.svg)](https://npmjs.com/package/lru-cache-node)> A lighting fast cache manager for node with least-recently-used policy.
A super fast cache for node with LRU policy. Cache will keep on adding values until the `maxSize` is reached.
After that it will start popping out the Least recently used/accessed value from the cache in order to set the new ones.
Supports expiry and stale.
Implemented using doubly-linked-list and hashmap with O(1) time complexity for gets and sets.
## Install
```
$ npm install --save lru-cache-node
```## Usage
```js
const Cache = require('lru-cache-node');let cache = new Cache(3); //set max size of cache as three
cache.set('a', 7); //sets a value in cache with 'a' as key and 7 as value
cache.set('b', 5);
cache.set('c', 3);
/*
[ { key: 'c', value: 3 },
{ key: 'b', value: 5 },
{ key: 'a', value: 7 } ]
*/
cache.set('d', 10) // pops out a
/*
[ { key: 'd', value: 10 },
{ key: 'c', value: 3 },
{ key: 'b', value: 5 } ]
*/
cache.get("b") //returns 5 and makes it most recently used
/*
[ { key: 'b', value: 5 },
{ key: 'd', value: 10 },
{ key: 'c', value: 3 } ]
*/cache.peek("d") //returns 10 but doesnt resets the order
/*
[ { key: 'b', value: 5 },
{ key: 'd', value: 10 },
{ key: 'c', value: 3 } ]
*/let cache = new Cache(3, 10); //Initialize Cache with size 3 and expiry for keys as 10ms
const sleep = ms => new Promise(r => setTimeout(r, ms));cache.set('a', 7); //valid for 10ms
cache.get('a'); //returns 7 and resets 10ms counter
await sleep(15);
cache.get('a'); //nullcache.set('b', 5, 30); //overwrites cache's default expiry of 10ms and uses 30ms
await sleep(15);
cache.get('b'); //returns 5 and resets the expiry of b back to 30ms
await sleep(35);
cache.get('b'); //null
```## API
### cache(maxSize, maxAge, stale)#### `maxSize`
Type: `Number`
Default: `Infinity`Maximum size of the cache.
#### `maxAge`
Type: `Number`
Default: `Infinity`Default expiry for all keys for the cache. It does not proactively deletes expired keys, but will return null when an expired key is being accessed.
#### `stale`
Type: `Boolean`
Default: `false`If set to true, will return the value of expired key before deleting it from cache.
### set(key, value, maxAge)
#### `key`
Key to be set.
#### `value`
Value for the key.
#### `maxAge`
Expiry of the key. Will override cache's `maxAge` if specified.
### get(key)
Returns the value for the key. If not key does not exist will return `null`.
>Both set() and get() will update the "recently used"-ness and expiry of the key.
### peek(key)
Returns the value for the key, without making the key most recently used. If not key does not exist will return `null`.
### delete(key)
Deletes the key from the cache.### contains(key)
Returns a boolean indication if the value exists in cache or not.
### has(key)
Alias for `contains` function.
### getSize()
Returns the current size of cache.
### reset()
Clears the whole cache and reinitialize it.
### toArray()
Returns an array form of the catch.
```js
let cache = new Cache();
cache.set("a", 5);
cache.set("b", 4);
cache.set("c", 0);
cache.toArray()
/*
[ { key: 'c', value: 0 },
{ key: 'b', value: 4 },
{ key: 'a', value: 5 } ]
*/
```### forEach(callback)
Takes a function and iterates over all the keys in the cache, in order of recentness. Callback takes `key`, `value` and `index` as params.
```js
let cache = new Cache();
cache.set("a", 1);
cache.set("b", 2);
cache.set("c", 3);
cache.forEach((key, value, index) => {
console.log(key, value, index)
})
/*
c 3 0
b 2 1
a 1 2
*/
```