• Stars
    star
    118
  • Rank 299,923 (Top 6 %)
  • Language
    JavaScript
  • License
    MIT License
  • Created over 6 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A lighting fast cache manager for node with least-recently-used policy.

lru-cache-node

Build Status codecov npm

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

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'); //null

cache.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.

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.

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
*/

More Repositories

1

node-skeleton

A MVC skeleton for quick starting neat node web apps. Contains social-auth and basic CRUD.
JavaScript
31
star
2

anabranch

A simple HTTP load balancer and reverse proxy written in Go.
Go
27
star
3

MEAN-skeleton

A MVC skeleton for quick starting neat MEAN web apps.
JavaScript
26
star
4

rSlashVideos

"Watch" any subreddit. Fetches videos from any subreddit and includes filters like hot, top of all time, top of year etc.
JavaScript
23
star
5

A-song-of-ice-and-fire-API

Javascript wrapper for the A song of ice and fire API
JavaScript
18
star
6

IMDb-Rating-Lookup

A python script that lets you check the IMDb rating, genre, cast etc of a movie with one click, without opening the browser.
Python
17
star
7

IMDB-Lookup-Extension

Helper code to tutorial
JavaScript
10
star
8

Facebook-Messenger-Yoda-Bot

A Facebook messenger bot which echoes your message, BUT in YODA style.
JavaScript
10
star
9

blog

Personal portfolio and blog
SCSS
3
star
10

dealing-with-asynchronous

Three ways to synchronously make a sandwich in javascript using callbacks, promises and async module.
JavaScript
3
star
11

csTeamGenerator

generates teams for Counter Strike based on pool based randomization. Built on meteor.js
JavaScript
3
star
12

userDirectory

JavaScript
2
star
13

Fuck-Feed

A simple script to hide facebook posts containing a particular keyword, in this case "Donald Trump". 😜
JavaScript
2
star
14

cost-explorer

An API to fetch costs using dynamic filters.
JavaScript
2
star
15

friend-suggester

JavaScript
2
star
16

IMDb_lookup_extension

A chrome extension to display IMDb rating and other info on a flash card.
JavaScript
2
star
17

ds.js

Implementaion of common data structures in JS. WIP.
JavaScript
2
star
18

pokedex-react

Pokedex built on react.
JavaScript
2
star
19

Go-curd-mongo

Teaching myself golang by building a crud Todo app using Go and mongo.
Go
2
star
20

hootsuite

JavaScript
1
star
21

log-parser

An api to parse logs and filter them based on params
JavaScript
1
star
22

gs

1
star
23

gsLabs

1
star
24

Restaurant-Catalogue

JavaScript
1
star
25

MVPlanding

A MVP landing page made using django and Twitter Bootstrap
JavaScript
1
star
26

codility-solutions

My attempt to solve Codility problems in python
Python
1
star
27

etherAPI

An api to get ledger using a wallet address.
JavaScript
1
star
28

paperlessLNMIIT

BTP project
JavaScript
1
star
29

node-docker

A demo node app for dockerization.
JavaScript
1
star
30

tiny

An extremely simple url shortener built using node and redis.
JavaScript
1
star
31

mockingjay

a simple library to mock real world data.
JavaScript
1
star