1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/zensh-thunk-redis

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 8.3 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 15.03.2025 10:11 05ad7db

thunk-redis

Клиент Redis с поддержкой пайплайна, основанный на thunk'ах, поддерживающий промисы.

[![Версия NPM][npm-image]][npm-url] [![Статус сборки][travis-image]][travis-url] [![Тема для обсуждения][talk-image]][talk-url]

thunks

Пример (примеры)

Основной 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);
});

Бенчмарк```js

➜ 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

API(Подробнее)

  1. redis.createClient([порт], [хост], [опции])
  2. redis.createClient([путь], [опции])
  3. redis.log([...])

redis.log

Помощник, выводит результат или стэк ошибок.

var client = redis.createClient();
client.info()(redis.log);

redis.createClient

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 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/zensh-thunk-redis.git
git@api.gitlife.ru:oschina-mirror/zensh-thunk-redis.git
oschina-mirror
zensh-thunk-redis
zensh-thunk-redis
master