Node.JS cache API for various persistence layers. Dynamis aims to implement a minimal cache API with maximal reusability. If you don't want to bother with specifics Dynamis is made for you. However, if you like full control and features than you should want to use any persistence layer directly.
npm install dynamis --save
Dynamis does not depend on the supported persistence layers to keep the amount of dependencies small. You'll have to add your desired persistence layer to t
var Dynamis = require('dynamis');
, redis = require('redis').createClient();
//
// Initialize cache layer, by providing the connection object and options.
//
var dynamis = new Dynamis('redis', redis, { database: 1 });
- Memory: In process memory.
- Memcached: Memcached
- Redis: Node-redis
- CouchDB: Cradle
- LevelDB: LevelUp
Any persistence layer will have access to the following methods, newly developed layers should implement all methods below.
API
Internal
Events
Get a cached value from the persistence layer.
key: String (required) database key
done: Function (required) completion callback
dynamis.get('key', function done(error, value) {
console.log(value);
});
Store key:value data in the persistence layer, with an optional time to live.
key: String (required) database key
value: String (required) value to JSON.stringify
ttl: Number (optional) time to live in seconds, defaults to 0 (never)
done: Function (required) completion callback
var value = { valid: 'json' };
dynamis.set('key', value, function done(error, result) {
console.log(result);
});
Set or refresh a time to live on the key.
key: String (required) database key
ttl: Number (required) time to live in seconds
done: Function (required) completion callback
dynamis.expire('key', 10, function done(error, result) {
console.log(result);
});
Delete the key and value from the persistence layer
key: String (required) database key
done: Function (required) completion callback
dynamis.del('key', function done(error, result) {
console.log(result);
});
Flush all data that is in the persistence layer. This feature is also available by
setting a environment variable, per example CACHE=flush:redis
would flush all
data from the redis database by adding flush
as before hook.
done: Function (required) completion callback
dynamis.flush(function done(error, result) {
console.log(result);
});
All API calls will flow through this function. Execute
will emit before
so that
any registered functions will be executed. before
will only be
run once, thereafter any provided function will executed immediately.
context: Object (required) usually the persistence layer
fn: Function (required) persistence layer method to call on context
arguments: Mixed (optional) additional arguments to supply to the function
dynamis.execute(redis.database, redis.database.set, key, value, done)
Loops over a set of API functions defined in dynamis.pre
. Before will be executed
once, as soon as any API method is called, per example dynamis.create
in cradle.
context: Object (required) usually the persistence layer
fn: Function (required) persistence layer method to call on context
args: Array (required) arguments to supply to the function
dynamis.before(redis.database, redis.database.set, [ key, value, done ])
Errors or failures emitted by the persistence layer will be emitted from dynamis. Handling connection or persistence errors from any layer will be done for you. Ignoring these errors is possible, EventEmitter3 will not throw the error when no listener is registered.
var Dynamis = require('dynamis');
, redis = require('redis').createClient();
//
// Initialize cache layer and listen to emitted errors.
//
var dynamis = new Dynamis('redis', redis, {});
dynamis.on('error', function handleError() {
console.log(arguments);
});