ssdb
v0.3.8
Published
ssdb nodejs client library, ssdb is a fast nosql database, an alternative to redis.
Readme
node-ssdb

ssdb nodejs/iojs client library, ssdb is a fast nosql database, an alternative to redis.
v0.3.0 (and higher versions) are not backward-compactiable with old versions(0.2.x).
Please dont send me emails for any questions about node-ssdb, open an issue on GitHub instead, thanks!
Ports
- Python port: https://github.com/hit9/ssdb.py
- Lua ngx client: https://github.com/eleme/lua-resty-ssdb
Supported Engines
- node.js >= v0.10.30
- iojs >= 1.0.4
Requirements
- ssdb 1.6.8.8+
Installation
$ npm install ssdbExample
The traditional Node.js way:
var ssdb = require('ssdb');
var pool = ssdb.createPool();
var conn = pool.acquire();
conn.set('key', 'val', function(err, data) {
if (err) {
throw err;
}
// data => '1'
});Work with tj/co, make it thunkify or promisify:
var co = require('co');
var pool = ssdb.createPool({promisify: true});
var conn = pool.acquire();
co(function *(){
var key = 'key';
var a = yield conn.set(key, 'val');
var b = yield conn.get(key);
console.log(a, b); // 1 'val'
}).catch(function(err) {
console.error(err)
});node-ssdb uses v8 native Promise to implement promisify, which requires nodejs v0.11.13+
To use bluebird as promise implementation (which is much faster than v8 native promise):
// use bluebird promise
global.Promise = require('bluebird').Promise;Callback Parameters
Callback functions have two parameters: error, data;
- on
status_ok: onlyerrorisundefined; - on
status_not_found:erroranddataare bothundefined - on
status_error,status_fail,status_client_error: onlydataisundefined.
Error Handling
var ssdb = require('ssdb');
var pool = ssdb.createPool();
pool.acquire().set('key', 'val', function(err, data) {
if (err && err instanceof ssdb.SSDBError)
throw err; // ssdb error
});Poolling Policies
There are 2 poolling policies avaliable: 'least_conn' and 'round_robin' (the default), e.g.
var pool = ssdb.createPool({policy: ssdb.Pool.policies.least_conn});API References
createPool(options)
To make a ssdb client:
var ssdb = require('ssdb');
var pool = ssdb.createPool();options (with default values):
{
host: '0.0.0.0',
port: 8888,
auth: undefined, // ssdb server auth password
authCallback: function(err, data) {if (err) throw err;}, // callback function on auth
size: 1, // connection pool size
timeout: 0,
promisify: false, // make api methods promisify.
thunkify: false, // make api methods thunkify.
policy: Pool.policies.round_robin,
}Note: auth requires ssdb v1.7.0.0+
pool.acquire()
Acquire a connection from pool.
pool.destroy()
Close all connections in the pool. (note that if a connection is closed, it will reconnect to ssdb server automatically if you reuse this conn to send commands, and the same with pool.)
pool.create(options)
Create a new connection and add it to the pool.
command names
ssdb.commandsSSDB API Documentation
Detail docs for ssdb interfaces can be found at: https://github.com/hit9/ssdb.api.docs
FAQ
Pipeline?
Node-ssdb pipelines automatically because node.js has async IO, this is different with other clients in sync IO languages (i.e. Python), node-ssdb always pipelines.
Commands & Callbacks ordering ?
On a single connection, the callbacks are run the same order as the commands are sent, TCP guarantees this: the stream will arrive in the same order as it was sent.
Connection Pool?
ssdb is a multiple-threading server, so the connection pool is required. Here are some examples to use the connection pool:
// async io and executed in order on the remote end. var conn = pool.acquire(); yield conn.set('key', 'val'); yield conn.get('key'); // async io and executed parallely on the remote end. yield [ pool.acquire().set('key1', 'val1'); pool.acquire().set('key2', 'val2'); ];
License
Copyright (c) 2014 Eleme, Inc. detail see LICENSE-MIT
