Node.js
NodeJS с Redis
Поиск…
замечания
Мы рассмотрели основные и наиболее часто используемые операции в node_redis. Вы можете использовать этот модуль, чтобы использовать всю полноту Redis и создавать действительно сложные приложения Node.js. Вы можете создать много интересного с этой библиотекой, например, с сильным слоем кеширования, мощной системой обмена сообщениями Pub / Sub и т. Д. Чтобы узнать больше о библиотеке, ознакомьтесь с их документацией .
Начиная
node_redis, как вы могли догадаться, является клиентом Redis для Node.js. Вы можете установить его через npm, используя следующую команду.
npm install redis
После того, как вы установили модуль node_redis, вам хорошо идти. Давайте создадим простой файл app.js и посмотрим, как связаться с Redis от Node.js.
app.js
var redis = require('redis');
client = redis.createClient(); //creates a new client
По умолчанию redis.createClient () будет использовать 127.0.0.1 и 6379 как имя хоста и порт соответственно. Если у вас есть другой хост / порт, вы можете предоставить их следующим образом:
var client = redis.createClient(port, host);
Теперь вы можете выполнить некоторые действия после установления соединения. В принципе, вам просто нужно прослушать события подключения, как показано ниже.
client.on('connect', function() {
console.log('connected');
});
Итак, следующий фрагмент переходит в app.js:
var redis = require('redis');
var client = redis.createClient();
client.on('connect', function() {
console.log('connected');
});
Теперь запустите приложение типа node в терминале. Перед запуском этого фрагмента убедитесь, что сервер Redis запущен и запущен.
Хранение пар ключей
Теперь, когда вы знаете, как подключиться к Redis от Node.js, давайте посмотрим, как хранить пары ключ-значение в хранилище Redis.
Сохранение строк
Все команды Redis отображаются как различные функции на клиентском объекте. Чтобы сохранить простую строку, используйте следующий синтаксис:
client.set('framework', 'AngularJS');
Или же
client.set(['framework', 'AngularJS']);
В приведенных выше фрагментах хранится простая строка AngularJS против ключевой структуры. Вы должны заметить, что оба фрагмента делают то же самое. Единственное различие заключается в том, что первый передаёт переменное количество аргументов, а позже передает массив args функции client.set()
. Вы также можете передать необязательный обратный вызов, чтобы получить уведомление, когда операция завершена:
client.set('framework', 'AngularJS', function(err, reply) {
console.log(reply);
});
Если по какой-либо причине операция завершилась неудачей, аргумент err
для обратного вызова представляет ошибку. Чтобы получить значение ключа, выполните следующие действия:
client.get('framework', function(err, reply) {
console.log(reply);
});
client.get()
позволяет получить ключ, сохраненный в Redis. Ключевое значение ключа можно получить через ответ аргумента обратного вызова. Если ключ не существует, значение ответа будет пустым.
Хранение хэша
Много раз хранение простых значений не решит вашу проблему. Вам нужно будет хранить хеши (объекты) в Redis. Для этого вы можете использовать hmset()
следующим образом:
client.hmset('frameworks', 'javascript', 'AngularJS', 'css', 'Bootstrap', 'node', 'Express');
client.hgetall('frameworks', function(err, object) {
console.log(object);
});
Вышеприведенный фрагмент хранит хэш в Redis, который отображает каждую технологию в свою структуру. Первый аргумент hmset()
- это имя ключа. Последующие аргументы представляют пары ключ-значение. Аналогично, hgetall()
используется для извлечения значения ключа. Если ключ найден, второй аргумент обратного вызова будет содержать значение, являющееся объектом.
Обратите внимание: Redis не поддерживает вложенные объекты. Все значения свойств объекта будут забиты в строки перед их сохранением. Вы также можете использовать следующий синтаксис для хранения объектов в Redis:
client.hmset('frameworks', {
'javascript': 'AngularJS',
'css': 'Bootstrap',
'node': 'Express'
});
Дополнительный обратный вызов также может быть передан, чтобы знать, когда операция будет завершена.
Все функции (команды) можно вызывать с помощью прописных / строчных эквивалентов. Например, client.hmset()
и client.HMSET()
одинаковы. Сохранение списков
Если вы хотите сохранить список элементов, вы можете использовать списки Redis. Чтобы сохранить список, используйте следующий синтаксис:
client.rpush(['frameworks', 'angularjs', 'backbone'], function(err, reply) {
console.log(reply); //prints 2
});
Вышеприведенный фрагмент создает список под названием frameworks и подталкивает к нему два элемента. Итак, длина списка теперь равна двум. Как вы можете видеть, я передал массив args
для rpush
. Первый элемент массива представляет собой имя ключа, в то время как остальные представляют элементы списка. Вы также можете использовать lpush()
вместо rpush()
для rpush()
элементов влево.
Чтобы получить элементы списка, вы можете использовать lrange()
следующим образом:
client.lrange('frameworks', 0, -1, function(err, reply) {
console.log(reply); // ['angularjs', 'backbone']
});
Обратите внимание, что вы получаете все элементы списка, передавая -1 в качестве третьего аргумента в lrange()
. Если вы хотите подмножество списка, вы должны передать конечный индекс здесь.
Хранение наборов
Наборы аналогичны спискам, но разница в том, что они не позволяют дублировать. Итак, если вы не хотите дублировать элементы в своем списке, вы можете использовать набор. Вот как мы можем изменить наш предыдущий фрагмент, чтобы использовать набор вместо списка.
client.sadd(['tags', 'angularjs', 'backbonejs', 'emberjs'], function(err, reply) {
console.log(reply); // 3
});
Как вы можете видеть, sadd()
создает новый набор с указанными элементами. Здесь длина набора равна трем. Чтобы получить элементы набора, используйте smembers()
следующим образом:
client.smembers('tags', function(err, reply) {
console.log(reply);
});
Этот фрагмент будет извлекать все элементы набора. Просто отметьте, что порядок не сохраняется при извлечении членов.
Это был список наиболее важных структур данных, найденных в каждом приложении Redis. Помимо строк, списков, наборов и хэшей вы можете хранить отсортированные наборы, hyperLogLogs и многое другое в Redis. Если вы хотите получить полный список команд и структур данных, посетите официальную документацию Redis. Помните, что почти каждая команда Redis отображается на объекте клиента, предлагаемом модулем node_redis.
Некоторые более важные операции поддерживаются node_redis.
Проверка наличия ключей
Иногда вам может потребоваться проверить, существует ли уже существующий ключ и действовать соответствующим образом. Для этого вы можете использовать функцию exists()
как показано ниже:
client.exists('key', function(err, reply) {
if (reply === 1) {
console.log('exists');
} else {
console.log('doesn\'t exist');
}
});
Удаление и истечение ключей
Иногда вам нужно очистить некоторые ключи и повторно инициализировать их. Чтобы очистить ключи, вы можете использовать команду del, как показано ниже:
client.del('frameworks', function(err, reply) {
console.log(reply);
});
Вы также можете указать срок действия существующего ключа следующим образом:
client.set('key1', 'val1');
client.expire('key1', 30);
Вышеприведенный фрагмент присваивает ключу ключа времени истечения 30 секунд.
Приращение и сокращение
Redis также поддерживает клавиши увеличения и уменьшения. Чтобы увеличить ключ, используйте функцию incr()
как показано ниже:
client.set('key1', 10, function() {
client.incr('key1', function(err, reply) {
console.log(reply); // 11
});
});
Функция incr()
увеличивает значение ключа на 1. Если вам нужно увеличивать на другую величину, вы можете использовать incrby()
. Аналогично, для уменьшения ключа вы можете использовать такие функции, как decr()
и decrby()
.