streaming-cache

0.5.5 • Public • Published

Circle CI

Streaming Cache

Speed up your services.

Cache, queue and distribute streams immediately. Streams can be replayed immediately, even if the source is not finished.

Uses a fixed size LRU-cache in the background.

Usefull for caching (slow) streaming connections, such as S3 requests or complex database queries.

If there are for example 3 requests for a certain file in close succession, then we can pipe the result for the first request into the cache. The 2 other requests will receive a stream which will start even before the first one is finished.

Performance

Serving from this cache is extremely fast. On my local machine I get 2.5GB per second for a single process on localhost using AB. (4th gen i7).

Installation

npm i streaming-cache --save

Quick example

 
var Cache = require('../index.js');
var cache = new Cache();
var fs = require('fs');
 
var inputStream = fs.createReadStream('readme.md');
var outputStream = fs.createWriteStream('test2.txt');
 
inputStream.pipe(cache.set('myKey'));
 
setTimeout(function(){
  outputStream.write('written from cache\n\n');
  cache.get('myKey').pipe(outputStream);
 }, 200);
 

Options

For a list of options see: https://www.npmjs.com/package/lru-cache

API

set(key)

returns a Duplex stream

fileStream.pipe(cache.set('key')).pipe(res);
get(key) => ReadableStream
var cached = cache.get('key');
if(cached){
    cached.pipe(res);
}

setData(key, data) => WriteableStream

A set data synchronously to stream at a later moment

getData

Get data with a callback.

cache.getData('key', function(err, data){
    if(err){
      //handle error
    }
    // do something with data
}));

setMetadata(key, data)

Set metadata for a stream to be used later.

getMetadata(key, data)

Get metadata

exists(key)

returns true or false if a key exists.

Readme

Keywords

Package Sidebar

Install

npm i streaming-cache

Weekly Downloads

43

Version

0.5.5

License

BSD-2-Clause

Unpacked Size

5.83 MB

Total Files

41

Last publish

Collaborators

  • laurent.zuijdwijk