Fork me on GitHub

9. Node.js модули, о которых вы должны знать: redis

Всем здравствуйте! Это девятый пост в моей серии статей Node.js модули, о которых вы должны знать.

Первый пост был про dnode — фристайл RPC библиотеку для node.js. Второй пост был посвящен optimist — легковесному парсеру командной строки для node.js. Третий был про lazy — ленивые списки для node.js. А четвертый — про request — швецарский нож HTTP стримминга. Пятый был про hashish — библиотеку для работы с хэшами. Шестой пост касался read — обертки для чтения со стандратного потока ввода (stdin). Седьмой был про ntwitter — twitter API для node.js. Восьмой пост был посвящён socket.io, который делает возможным websockets во всех браузерах.

Сегодня я хочу вам представить node_redis — лучшую клиентскую API библиотеку для Redis. Автором библиотеки является Matt Ranney.

Эта библиотека — полноценный Redis клиент для node.js. Она поддерживает все комманды Redis, включая даже те, что были добавлены совсем недавно (например, EVAL из экспериментальной ветки).

Вот пример использования:

var redis = require("redis");
var client = redis.createClient();

client.on("error", function (err) {
    console.log("Error " + err);
});

client.set("string key", "string val", redis.print);
client.hset("hash key", "hashtest 1", "some value", redis.print);
client.hset(["hash key", "hashtest 2", "some other value"], redis.print);
client.hkeys("hash key", function (err, replies) {
    console.log(replies.length + " replies:");
    replies.forEach(function (reply, i) {
        console.log("    " + i + ": " + reply);
    });
    client.quit();
});

А вот результат работы примера:

$ node example.js
Reply: OK
Reply: 0
Reply: 0
2 replies:
    0: hashtest 1
    1: hashtest 2

Каждая Redis комманда представляет из себя функцию объекта client. Все функции принимают в качестве аргументов либо массив args и необязательную функцию callback, либо произвольное число аргументов, последним из которых является необязательная функция обратного вызова (callback).

Вот пример передачи массива и callback’a:

client.mset(["key 1", "val 1"], function (err, res) {});

А вот тот же пример, но во втором стиле:

client.mset("key 1", "val 1", function (err, res) {});

Обратите внимание, что в обоих случаях callback — не обязателен:

client.set("some key", "some val");
client.set(["some other key", "some val"]);

Полный список комманд, поддерживаемых Redis, перечислен в Redis Command Reference.

Команды могут быть указаны, как в верхнем, так и в нижнем регистре: client.get() тоже самое, что и client.GET().

Redis можно тривиально установить через npm:

npm install redis

PS: Pieter Noordhuis сделал биндинги к оффициальной C-библиотеке hiredis, которая написана в неблокирующем стиле и достаточно быстра. Она называется hiredis-node. Чтобы установить hiredis, необходимо выполнить:

npm install hiredis redis

Если установлена hiredis, то node_redis будет использовать её «по умолчанию». В противном случае, будет использовать пасер, реализованный на чистом JavaScript.