Node.js
NodeJS z Redis
Szukaj…
Uwagi
Omówiliśmy podstawowe i najczęściej używane operacje w node_redis. Możesz użyć tego modułu, aby wykorzystać pełną moc Redis i stworzyć naprawdę wyrafinowane aplikacje Node.js. Dzięki tej bibliotece możesz budować wiele interesujących rzeczy, takich jak silna warstwa buforowania, potężny system przesyłania wiadomości Pub / Sub i inne. Aby dowiedzieć się więcej o bibliotece, zapoznaj się z ich dokumentacją .
Pierwsze kroki
node_redis, jak się zapewne domyślacie, jest klientem Redis dla Node.js. Możesz zainstalować go za pomocą npm za pomocą następującego polecenia.
npm install redis
Po zainstalowaniu modułu node_redis możesz zacząć. Utwórzmy prosty plik app.js i zobaczmy, jak połączyć się z Redis z Node.js.
app.js
var redis = require('redis');
client = redis.createClient(); //creates a new client
Domyślnie redis.createClient () użyje odpowiednio 127.0.0.1 i 6379 jako nazwy hosta i portu. Jeśli masz inny host / port, możesz podać je w następujący sposób:
var client = redis.createClient(port, host);
Teraz możesz wykonać jakąś akcję po ustanowieniu połączenia. Zasadniczo wystarczy nasłuchiwać zdarzeń łączenia, jak pokazano poniżej.
client.on('connect', function() {
console.log('connected');
});
Tak więc poniższy fragment przechodzi do app.js:
var redis = require('redis');
var client = redis.createClient();
client.on('connect', function() {
console.log('connected');
});
Teraz wpisz aplikację węzła w terminalu, aby uruchomić aplikację. Przed uruchomieniem tego fragmentu upewnij się, że serwer Redis jest uruchomiony.
Przechowywanie par klucz-wartość
Teraz, gdy wiesz, jak połączyć się z Redis z Node.js, zobaczmy, jak przechowywać pary klucz-wartość w magazynie Redis.
Przechowywanie ciągów
Wszystkie polecenia Redis są widoczne jako różne funkcje w obiekcie klienta. Aby zapisać prosty ciąg, użyj następującej składni:
client.set('framework', 'AngularJS');
Lub
client.set(['framework', 'AngularJS']);
Powyższe fragmenty przechowują prosty ciąg AngularJS w strukturze klucza. Należy zauważyć, że oba fragmenty robią to samo. Jedyna różnica polega na tym, że pierwszy przekazuje zmienną liczbę argumentów, podczas gdy później przekazuje tablicę argumentów do funkcji client.set()
. Możesz także przekazać opcjonalne oddzwonienie, aby otrzymać powiadomienie po zakończeniu operacji:
client.set('framework', 'AngularJS', function(err, reply) {
console.log(reply);
});
Jeśli z jakiegoś powodu operacja się nie powiodła, argument err
dla wywołania zwrotnego reprezentuje błąd. Aby pobrać wartość klucza, wykonaj następujące czynności:
client.get('framework', function(err, reply) {
console.log(reply);
});
client.get()
pozwala odzyskać klucz przechowywany w Redis. Dostęp do wartości klucza można uzyskać poprzez odpowiedź argumentu wywołania zwrotnego. Jeśli klucz nie istnieje, wartość odpowiedzi będzie pusta.
Przechowywanie Hash
Wielokrotne przechowywanie prostych wartości nie rozwiąże twojego problemu. Będziesz musiał przechowywać skróty (obiekty) w Redis. W tym celu możesz użyć funkcji hmset()
w następujący sposób:
client.hmset('frameworks', 'javascript', 'AngularJS', 'css', 'Bootstrap', 'node', 'Express');
client.hgetall('frameworks', function(err, object) {
console.log(object);
});
Powyższy fragment przechowuje skrót w Redis, który mapuje każdą technologię do jej frameworka. Pierwszym argumentem funkcji hmset()
jest nazwa klucza. Kolejne argumenty reprezentują pary klucz-wartość. Podobnie hgetall()
służy do pobierania wartości klucza. Jeśli klucz zostanie znaleziony, drugi argument wywołania zwrotnego będzie zawierał wartość, która jest obiektem.
Zauważ, że Redis nie obsługuje zagnieżdżonych obiektów. Wszystkie wartości właściwości w obiekcie zostaną zapisane w łańcuchy przed zapisaniem. Możesz także użyć następującej składni do przechowywania obiektów w Redis:
client.hmset('frameworks', {
'javascript': 'AngularJS',
'css': 'Bootstrap',
'node': 'Express'
});
Opcjonalne wywołanie zwrotne można również przekazać, aby wiedzieć, kiedy operacja jest zakończona.
Wszystkie funkcje (polecenia) można wywoływać za pomocą odpowiedników wielkich / małych liter. Na przykład client.hmset()
i client.HMSET()
są takie same. Przechowywanie list
Jeśli chcesz przechowywać listę przedmiotów, możesz użyć list Redis. Aby zapisać listę, użyj następującej składni:
client.rpush(['frameworks', 'angularjs', 'backbone'], function(err, reply) {
console.log(reply); //prints 2
});
Powyższy fragment tworzy listę o nazwie frameworki i wypycha do niej dwa elementy. Długość listy wynosi teraz dwa. Jak widać, przekazałem tablicę args
do rpush
. Pierwszy element tablicy reprezentuje nazwę klucza, podczas gdy reszta reprezentuje elementy listy. Możesz także użyć lpush()
zamiast rpush()
aby przesunąć elementy w lewo.
Aby pobrać elementy listy, możesz użyć funkcji lrange()
w następujący sposób:
client.lrange('frameworks', 0, -1, function(err, reply) {
console.log(reply); // ['angularjs', 'backbone']
});
Zauważ, że wszystkie elementy listy otrzymujesz, przekazując -1 jako trzeci argument funkcji lrange()
. Jeśli chcesz mieć podzbiór listy, powinieneś przekazać tutaj indeks końcowy.
Przechowywanie zestawów
Zestawy są podobne do list, ale różnica polega na tym, że nie zezwalają na duplikaty. Jeśli więc nie chcesz żadnych zduplikowanych elementów na liście, możesz użyć zestawu. Oto, w jaki sposób możemy zmodyfikować nasz poprzedni fragment kodu, aby używał zestawu zamiast listy.
client.sadd(['tags', 'angularjs', 'backbonejs', 'emberjs'], function(err, reply) {
console.log(reply); // 3
});
Jak widać, funkcja sadd()
tworzy nowy zestaw z określonymi elementami. Tutaj długość zestawu wynosi trzy. Aby pobrać członków zestawu, użyj funkcji smembers()
w następujący sposób:
client.smembers('tags', function(err, reply) {
console.log(reply);
});
Ten fragment kodu pobierze wszystkie elementy zestawu. Pamiętaj tylko, że kolejność nie jest zachowywana podczas pobierania członków.
To była lista najważniejszych struktur danych znalezionych w każdej aplikacji opartej na Redis. Oprócz ciągów, list, zestawów i skrótów, możesz przechowywać posortowane zestawy, hyperLogLog i inne w Redis. Jeśli chcesz uzyskać pełną listę poleceń i struktur danych, odwiedź oficjalną dokumentację Redis. Pamiętaj, że prawie każde polecenie Redis jest widoczne na obiekcie klienta oferowanym przez moduł node_redis.
Niektóre ważniejsze operacje obsługiwane przez node_redis.
Sprawdzanie istnienia kluczy
Czasami może być konieczne sprawdzenie, czy klucz już istnieje i postępowanie zgodnie z nim. Aby to zrobić, możesz użyć funkcji exists()
jak pokazano poniżej:
client.exists('key', function(err, reply) {
if (reply === 1) {
console.log('exists');
} else {
console.log('doesn\'t exist');
}
});
Usuwanie i wygasanie kluczy
Czasami musisz wyczyścić niektóre klucze i ponownie je zainicjować. Aby wyczyścić klucze, możesz użyć polecenia del, jak pokazano poniżej:
client.del('frameworks', function(err, reply) {
console.log(reply);
});
Można również podać czas wygaśnięcia istniejącego klucza w następujący sposób:
client.set('key1', 'val1');
client.expire('key1', 30);
Powyższy fragment przypisuje czas ważności 30 sekund do klawisza key1.
Zwiększanie i zmniejszanie
Redis obsługuje także zwiększanie i zmniejszanie kluczy. Aby zwiększyć klawisz, użyj funkcji incr()
jak pokazano poniżej:
client.set('key1', 10, function() {
client.incr('key1', function(err, reply) {
console.log(reply); // 11
});
});
Funkcja incr()
zwiększa wartość klucza o 1. Jeśli potrzebujesz zwiększyć o inną wartość, możesz użyć funkcji incrby()
. Podobnie, do zmniejszenia klucza możesz użyć funkcji takich jak decr()
i decrby()
.