Een van de meest populaire bibliotheken om met een Redis-server te werken vanuit een Node.js-app is node-redis
, beschikbaar op https://github.com/NodeRedis/node-redis.
Installeer de bibliotheek in uw project:
npm install redis
Tip:vergeet niet om eerst
npm init -y
. uit te voeren als het project gloednieuw is en u geenpackage.json
. heeft bestand al.
Verbinding maken met de Redis-instantie
Nadat de bibliotheek is geïnstalleerd, moet u deze in uw project gebruiken met
const redis = require('redis')
of
import redis from 'redis'
Zodra u de redis
object, maak een nieuwe klant aan met
const client = redis.createClient({
url: 'redis://YOUR REDIS INSTANCE URL'
})
en maak verbinding met (binnen een asynchrone functie):
await client.connect()
Zodra u de klant heeft, kunnen we alle dingen uitvoeren waarvan we weten dat Redis kan doen.
Om de verbinding te verbreken, bel:
client.quit()
Sleutelwaarden opslaan en ophalen
Sla een sleutelwaardepaar op in redis met behulp van set()
:
client.set("<key>", "<value>")
Voorbeeld:
client.set("name", "Flavio")
client.set("age", 37)
Als u KEYS *
. uitvoert in redis-cli
op een schone Redis-server zie je de twee sleutels verschijnen:
U kunt de waarde in een sleutel opslaan met get()
:
const value = await client.get("name")
Verwijder een sleutel/waarde-tekenreeks met
client.del("names")
Werken met lijsten
In Redis kunnen we met lijsten werken met de
LPUSH
RPUSH
LTRIM
LRANGE
commando's die we in de Redis-module hebben geïntroduceerd. Ze worden rechtstreeks toegewezen als client
objectmethoden.
Maak een lijst met
client.lPush('names', 'Flavio')
Duw een nieuw item onderaan de lijst:
client.rPush('names', 'Roger')
Of bovenaan de lijst:
client.lPush('names', 'Syd')
Maak een lijst van alle items in een lijst met:
const result = await client.lRange('names', 0, -1)
//result is [ 'Roger', 'Flavio', 'Syd' ]
Zet items uit een lijst met
client.rPop('names')
Een lijst verwijderen met
client.del('names')
Werken met sets
In Redis werken we met sets met behulp van
SADD
SPOP
SMEMBERS
.
en andere Redis-commando's, die direct als client
worden toegewezen objectmethoden.
Maak een set met
client.sAdd('names', 'Flavio')
Voeg meer items toe aan de set:
client.sAdd('names', 'Roger')
U kunt meerdere tegelijk toevoegen:
client.sAdd('names', 'Roger', 'Syd')
ook door een array door te geven:
const names = ['Flavio', 'Roger', 'Syd']
client.sAdd('names', names)
Maak een lijst van alle items in een set met:
const names = await client.sMembers('names')
Laat een willekeurig item uit een set vallen met:
client.sPop('names')
Voeg een tweede parameter toe om meerdere willekeurige items te laten vallen:
client.sPop('names', 3)
Een set verwijderen met
client.del('names')
Werken met hashes
In Redis werken we met hashes met behulp van een reeks opdrachten die
. bevattenHMSET
HGETALL
HSET
HINCRBY
.
en andere commando's die we in de Redis-module hebben geïntroduceerd, die direct als client
. toewijzen objectmethoden.
Maak een hash met
client.hSet('person:1', 'name', 'Flavio', 'age', 37)
Gebruik HGETALL om alle eigenschappen van een gebruiker te krijgen:
const items = client.hGetAll('person:1')
U kunt een hash-eigenschap bijwerken met HSET:
client.hSet('person:1', 'age', 38)
U kunt een waarde die is opgeslagen in een hash verhogen met HINCRBY:
client.hIncrBy('person:1', 'age', 1)
Een hash verwijderen met
client.del('person:1')
Abonnementen
Abonnementen zijn een geweldige functie van Redis, waardoor we echt mooie dingen kunnen doen in Node.js.
Een uitgever stuurt een bericht op een kanaal. Meerdere abonnees ontvangen het.
Abonneer je op een kanaal met
await subscriber.subscribe('dogs', (message) => {
console.log(message);
})
Publiceer naar een kanaal met client.publish('<channel>', '<message>')
client.publish('dogs', 'Roger')
Houd er rekening mee dat u niet kunt publiceren en u kunt abonneren vanaf dezelfde client
instantie.
Om dit in dezelfde app te doen, maakt u 2 clients:
const subscriber = redis.createClient({ ... })
const publisher = redis.createClient({ ... })
await subscriber.subscribe('dogs', (message) => {
console.log(channel, message);
})
publisher.publish('dogs', 'Roger')