ssdb
v0.3.8
Published
ssdb nodejs client library, ssdb is a fast nosql database, an alternative to redis.
Downloads
60
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 ssdb
Example
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
: onlyerror
isundefined
; - on
status_not_found
:error
anddata
are bothundefined
- on
status_error
,status_fail
,status_client_error
: onlydata
isundefined
.
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.commands
SSDB 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