js-cache
Version:
Caching library supporting timeouts, events and external data sources
172 lines (103 loc) • 4.33 kB
Markdown
# Caching library for JavaScript and Node.js
Caching library with support for timeouts, events and external data sources.
## Overview
* [Usage in Node.js](#usage-in-nodejs)
* [Usage in browsers](#usage-in-browsers)
* [Instance](#instance)
* [API](#api)
* [External data source](#external-data-source)
* [Events](#events)
* [Developing](#developing)
* [Building](#building)
* [Testing](#testing)
## Usage in Node.js
var cache = require('js-cache');
cache.set('lorem', 'ipsum', 60000);
console.log(cache.get('lorem'));
var myCache = new cache();
myCache.set('lorem', 'dolor', 60000);
console.log(myCache.get('lorem'));
## Usage in browsers
<script src="bundle/cache.js"></script>
<script>
cache.set('lorem', 'ipsum', 60000);
console.log(cache.get('lorem'));
</script>
## Instance
It is possible to call the `cache` object directly:
cache.set('lorem', 'ipsum');
console.log(cache.get('lorem'));
or use it as a constructor to create a separate storage:
var c2 = new cache();
c2.set('lorem', 'dolor');
console.log(c2.get('lorem'));
## API
### cache.set(`key`, `value`, `[ttl]`)
Cache data or update and existing record.
`key` Unique key identifying the cache
`value` Cached value
`ttl` Time to live in milliseconds (optional)
### cache.get(`key`, `[callback]`)
Get cached value. Returns cached value (or undefined) if no callback was provided. Always returns undefined if callback argument is present.
`key` Key identifying the cache
`callback` Return value in callback if record exists in memory or on external resource (optional)
### cache.del(`key`)
Delete cached data. Returns true if the record existed, false if not.
`key` Key identifying the cache
### cache.clear()
Clear all cached data. Returns number of cleared records.
### cache.size()
Returns number of cached records.
### cache.debug()
Returns internal object with cached records.
### cache.keys()
Returns list of cached record keys.
## External data source
It is possible to forward api requests to external handlers. They can be used for logging, storing in persistent database etc. The cache library will function as a temporary, in-memory layer.
var c = new cache({
set: setHandler,
get: getHandler,
del: delHandler,
clear: clearHandler
});
All handlers are optional.
`setHandler` is called with `key`, `value`, `ttl` on cache.set().
`getHandler` is called with `key`, `callback` on cache.get() when a callback is provided and the key is not present in the cache. The getHandler is required to execute `callback`.
`delHandler` is called with `key` on cache.del(). It is not called when a cached record times out.
`clearHandler` is called without arguments on cache.clear().
## Events
The cache library uses the Backbone event framework. Please refer to their [documentation](http://backbonejs.org/#Events) for a detailed overview.
### set , set:key
Emitted when setting a value to a new record.
cache.on('set', function(key, value, ttl){});
cache.on('set:lorem', function(value, ttl){});
cache.set('lorem', 'ipsum', 123);
### update, update:key
Emitted when updating the value or ttl of a known record.
cache.set('lorem', 'ipsum');
cache.on('update', function(key, value, ttl){});
cache.on('update:lorem', function(value, ttl){});
cache.set('lorem', 'ipsum', 123);
### del, del:key
Emitted when deleting a record or when a cached record times out.
cache.set('lorem', 'ipsum');
cache.on('del', function(key){});
cache.on('del:lorem', function(){});
cache.del('lorem');
### clear
Emitted when the cache gets cleared.
cache.on('clear', function(size){});
cache.clear();
## Developing
The library is published to NPM and can be installed with the following command:
$ npm install js-cache
## Building
The scripts have to be bundled in order to use them in a browser. One of the tools you can use is browserify.
$ sudo npm install browserify -g
$ make browserify
This will build the script in `bundle/cache.js`
## Testing
Navigate to this module's repository and make sure you have the development modules installed:
$ npm install
Run the tests:
$ npm test