acache
npm install acache
Sometimes you want to:
- make an async call to get some data
- but use a cache if possible
Getting this right requires:
- creating an LRU
- a locking mechanism, so a bunch of calls for the same data on a cold cache don't cause multiple executions of your expensive function for the same data
- an easy uncaching call
This little lib makes it easy.
Coffeescript example using a database call (but really, any expensive async call works).
ac.query
always calls back with (err, result).
require 'acache' ac = maxAgeMs: 10000maxStorage: 100 # pick a string for the cache key: key = "-" # say, get something from the database, given 2 uid's acquery keyBy: key : mysqlquery 'SELECT BLEAH WHERE FOO=? AND BAR=?'uidfriend_uid res = rowsinfo cb errresdefer errres # remove something from the cache acuncache keyBy: key # manually add something acput keyBy: keyval # check some basic stats consolelog acstats # size, hits, misses, etc.
Curious if the cache was hit
It calls back with a 3rd boolean paramwhether the cache was hit:acquery keyBy: whatever : cb null"hello world"defer errresdid_hit
constructor params:
maxAgeMs
: max time to store something in cachemaxStorage
: max answers to cache
query
params:
- arg0 (object):
keyBy
: a key for this cache call. Feel free to pass a string, number, or object; it will be hashedfn
: a function to run, to fill the cache, if it's missing. your function should take one parameter,cb
. It should then callcb
witherr, res
- arg1 (fn) :
- a function you want called with the results of your
fn
. Say,err, res
from either the cache or hot read
- a function you want called with the results of your
Errors
This does not cache errors. If you want to cache errors you can easily call back with null, {err, res}
.