55 lines
1.6 KiB
JavaScript
55 lines
1.6 KiB
JavaScript
var redis = require('redis')
|
||
, Pool = require('generic-pool').Pool;
|
||
|
||
var RedisPool = {
|
||
// Acquire resource.
|
||
//
|
||
// - `database` {String} redis database name
|
||
// - `callback` {Function} callback to call once acquired. Takes the form
|
||
// `callback(err, resource)`
|
||
acquire: function(database, callback) {
|
||
if (!this.pools[database]) {
|
||
this.pools[database] = this.makePool(database);
|
||
}
|
||
this.pools[database].acquire(function(resource) {
|
||
callback(resource);
|
||
});
|
||
},
|
||
|
||
// Release resource.
|
||
//
|
||
// - `database` {String} redis database name
|
||
// - `resource` {Object} resource object to release
|
||
release: function(database, resource) {
|
||
this.pools[database] && this.pools[database].release(resource);
|
||
},
|
||
|
||
// Cache of pools by database name.
|
||
pools: {},
|
||
|
||
// Factory for pool objects.
|
||
makePool: function(database) {
|
||
return Pool({
|
||
name: database,
|
||
create: function(callback){
|
||
var client = redis.createClient(global.settings.redis_port, global.settings.redis_host);
|
||
client.on('connect', function () {
|
||
client.send_anyway = true;
|
||
client.select(database);
|
||
client.send_anyway = false;
|
||
});
|
||
return callback(client);
|
||
},
|
||
destroy: function(client) {
|
||
return client.quit();
|
||
},
|
||
max: 50,
|
||
idleTimeoutMillis: 10000, //60000, //100 in dev
|
||
reapIntervalMillis: 1000, //10 in dev
|
||
log: false
|
||
});
|
||
}
|
||
}
|
||
|
||
|
||
module.exports = RedisPool; |