Клиент Redis с поддержкой пайплайна, основанный на thunk'ах, поддерживающий промисы.
[![Версия NPM][npm-image]][npm-url] [![Статус сборки][travis-image]][travis-url] [![Тема для обсуждения][talk-image]][talk-url]
Основной API thunk:
var redis = require('thunk-redis');
var client = redis.createClient({
database: 0
});
client.on('connect', function() {
console.log('Redis подключен!');
});
client.info('server')(function(error, res) {
console.log('Информация сервера Redis:', res);
return this.dbsize();
})(function(error, res) {
console.log('Размер текущей базы данных:', res);
return this.select(0);
})(function(error, res) {
console.log('Выбрана база данных 0:', res);
return this.quit();
})(function(error, res) {
console.log('Закрыто соединение клиента Redis:', res);
});
Использование API промисов:
var redis = require('thunk-redis');
var client = redis.createClient({
database: 1,
usePromise: true
});
client.on('connect', function() {
console.log('Redis подключен!');
});
client
.info('server')
.then(function(res) {
console.log('Информация сервера Redis:', res);
return client.dbsize();
})
.then(function(res) {
console.log('Размер текущей базы данных:', res);
return client.select(0);
})
.then(function(res) {
console.log('Выбрана база данных 0:', res);
return client.quit();
})
.then(function(res) {
console.log('Закрыто соединение клиента Redis:', res);
});
Поддержка генераторов в API thunk:
var redis = require('thunk-redis');
var client = redis.createClient();
client.select(1)(function*(error, res) {
console.log(error, res);
yield this.set('foo', 'bar');
yield this.set('bar', 'baz');
console.log('foo -> %s', yield this.get('foo'));
console.log('bar -> %s', yield this.get('bar'));
});
``` var user = {
id: 'u001',
name: 'jay',
age: 24
};
// транзакция, отличается от node_redis!
yield [
this.multi(),
this.set(user.id, JSON.stringify(user)),
this.zadd('userAge', user.age, user.id),
this.pfadd('ageLog', user.age),
this.exec()
];
return this.quit();
})(function(error, res) {
console.log(error, res);
});
➜ thunk-redis git:(master) ✗ node --harmony benchmark/index.js redis(N):node_redis OK redis(T):thunk-redis OK Начало...
redis(N): PING 49358 операций в секунду 100% redis(T): PING 54495 операций в секунду 110.4%
redis(N): SET малую строку 39062 операции в секунду 100% redis(T): SET малую строку 44523 операции в секунду 114.0%
redis(N): GET малую строку 43859 операций в секунду 100% redis(T): GET малую строку 47687 операций в секунду 108.7%
redis(N): SET длинную строку 28320 операций в секунду 100% redis(T): SET длинную строку 35323 операции в секунду 124.7%
redis(N): GET длинную строку 30432 операции в секунду 100% redis(T): GET длинную строку 26645 операций в секунду 87.6%
redis(N): INCR 46061 операций в секунду 100% redis(T): INCR 48756 операций в секунду 105.9%
redis(N): LPUSH 39824 операции в секунду 100% redis(T): LPUSH 45289 операций в секунду 113.7%
redis(N): LRANGE 100 8322 операции в секунду 100% redis(T): LRANGE 100 10094 операции в секунду 121.3%
## Установка
**Node.js:**
```bash
npm install thunk-redis
Помощник, выводит результат или стэк ошибок.
var client = redis.createClient();
client.info()(redis.log);
var client1 = redis.createClient();
var client2 = redis.createClient({database: 2});
var client3 = redis.createClient(6379, {database: 2});
var client4 = redis.createClient(6379, '127.0.0.1', {database: 2});
var client5 = redis.createClient('/tmp/redis.sock');
var client6 = redis.createClient('/tmp/redis.sock', {database: 2});
```- `options.authPass`: *Необязательный*, Тип: `Строка`, По умолчанию: `''`.
- `options.database`: *Необязательный*, Тип: `Число`, По умолчанию: `0`.
- `options.debugMode`: *Необязательный*, Тип: `Логическое значение`, По умолчанию: `false`.
Выводит данные запроса и ответа.
- `options.returnBuffers`: *Необязательный*, Тип: `Логическое значение`, По умолчанию: `false`.
- `options.usePromise`: *Необязательный*, Тип: `Логическое значение` или конструктор `Promise`, По умолчанию: `false`.
Экспортирует API команд с использованием промисов.
**Использует стандартный Promise:**
```js
var redis = require('thunk-redis');
var client = redis.createClient({
database: 1,
usePromise: true
});
```
**Использует bluebird:**
```js
var redis = require('thunk-redis');
var Bluebird = require('bluebird');
var client = redis.createClient({
database: 1,
usePromise: Bluebird
});
```
- `options.noDelay`: *Необязательный*, Тип: `Логическое значение`, По умолчанию: `true`.
Отключает алгоритм Нейгла. По умолчанию TCP-соединения используют алгоритм Нейгла, который буферизирует данные перед отправкой. Установка значения `true` для `noDelay` приведёт к немедленной отправке данных каждый раз при вызове метода `socket.write()`.
- `options.keepAlive`: *Необязательный*, Тип: `Логическое значение`, По умолчанию: `true`.
Включение/отключение функциональности keep-alive и возможность установки начального времени задержки до отправки первого пакета keep-alive на незанятом сокете.
- `options.timeout`: *Необязательный*, Тип: `Число`, По умолчанию: `0`. Устанавливает сокет на отключение после `timeout` миллисекунд бездействия на сокете. Если значение `timeout` равно `0`, то существующее время бездействия будет отключено.
Когда происходит триггеринг временного ограничения бездействия, сокет получит событие `'timeout'`, но соединение не будет разорвано.
- `options.retryDelay`: *Необязательный*, Тип: `число`, По умолчанию: `5000`.
- `options.maxAttempts`: *Необязательный*, Тип: `число`, По умолчанию: `5`.
- `options.commandsHighWater`: *Необязательный*, Тип: `число`, По умолчанию: `10000`.
[npm-url]: https://npmjs.org/package/thunk-redis
[npm-image]: http://img.shields.io/npm/v/thunk-redis.svg
[travis-url]: https://travis-ci.org/thunks/thunk-redis
[travis-image]: http://img.shields.io/travis/thunks/thunk-redis.svg
[talk-url]: https://guest.talk.ai/rooms/d1ccbf802n
[talk-image]: https://img.shields.io/talk/t/d1ccbf802n.svg
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )