Една от най-популярните библиотеки за работа със сървър Redis от приложение Node.js е node-redis
, достъпен на https://github.com/NodeRedis/node-redis.
Инсталирайте библиотеката във вашия проект:
npm install redis
Съвет:не забравяйте първо да стартирате
npm init -y
ако проектът е чисто нов и няматеpackage.json
файл вече.
Свържете се с екземпляра на Redis
След като библиотеката е инсталирана, изисквайте я във вашия проект с помощта на
const redis = require('redis')
или
import redis from 'redis'
След като имате redis
обект, създайте нов клиент с помощта на
const client = redis.createClient({
url: 'redis://YOUR REDIS INSTANCE URL'
})
и се свържете с помощта на (вътре в асинхронна функция):
await client.connect()
След като имате клиента, ние можем да изпълняваме всички неща, които знаем, че Redis може да направи.
За да затворите връзката, обадете се на:
client.quit()
Съхраняване и извличане на ключови стойности
Съхранявайте двойка ключови стойности в redis, като използвате set()
:
client.set("<key>", "<value>")
Пример:
client.set("name", "Flavio")
client.set("age", 37)
Ако стартирате KEYS *
в redis-cli
на чист Redis сървър, ще видите да се показват двата ключа:
Можете да получите стойността, съхранена в ключ, като използвате get()
:
const value = await client.get("name")
Изтрийте низ ключ/стойност с помощта на
client.del("names")
Работа със списъци
В Redis можем да работим със списъци с помощта на
LPUSH
RPUSH
LTRIM
LRANGE
команди, които въведохме в модула Redis. Те картографират директно като client
обективни методи.
Създайте списък с помощта на
client.lPush('names', 'Flavio')
Натиснете нов елемент в края на списъка:
client.rPush('names', 'Roger')
Или в горната част на списъка:
client.lPush('names', 'Syd')
Избройте всички елементи в списък, като използвате:
const result = await client.lRange('names', 0, -1)
//result is [ 'Roger', 'Flavio', 'Syd' ]
Пуснете елементи от списък с помощта на
client.rPop('names')
Изтрийте списък с
client.del('names')
Работа с набори
В Redis работим с набори с помощта на
SADD
SPOP
SMEMBERS
.
и други команди на Redis, които картографират директно като client
обективни методи.
Създайте набор с
client.sAdd('names', 'Flavio')
Добавете още елементи към комплекта:
client.sAdd('names', 'Roger')
Можете да добавите няколко наведнъж:
client.sAdd('names', 'Roger', 'Syd')
също чрез предаване на масив:
const names = ['Flavio', 'Roger', 'Syd']
client.sAdd('names', names)
Избройте всички елементи в комплект, като използвате:
const names = await client.sMembers('names')
Пуснете произволен елемент от набор, като използвате:
client.sPop('names')
Добавете втори параметър, за да премахнете няколко произволни елемента:
client.sPop('names', 3)
Изтрийте набор с
client.del('names')
Работа с хешове
В Redis работим с хешове, използвайки набор от команди, които включват
HMSET
HGETALL
HSET
HINCRBY
.
и други команди, които въведохме в модула Redis, които картографират директно като client
обективни методи.
Създайте хеш с помощта на
client.hSet('person:1', 'name', 'Flavio', 'age', 37)
За да получите всички свойства на потребител, използвайте HGETALL:
const items = client.hGetAll('person:1')
Можете да актуализирате хеш свойство с помощта на HSET:
client.hSet('person:1', 'age', 38)
Можете да увеличите стойност, съхранена в хеш, като използвате HINCRBY:
client.hIncrBy('person:1', 'age', 1)
Изтрийте хеш с помощта на
client.del('person:1')
Абонаменти
Абонаментите са невероятна функция на Redis, която ни дава възможност да правим наистина фантастични неща в Node.js.
Издател изпраща съобщение в канал. Получават го множество абонати.
Абонирайте се за канал с помощта на
await subscriber.subscribe('dogs', (message) => {
console.log(message);
})
Публикувайте в канал с помощта на client.publish('<channel>', '<message>')
client.publish('dogs', 'Roger')
Имайте предвид, че не можете да публикувате и да се абонирате от един и същ client
пример.
За да направите това в същото приложение, създайте 2 клиента:
const subscriber = redis.createClient({ ... })
const publisher = redis.createClient({ ... })
await subscriber.subscribe('dogs', (message) => {
console.log(channel, message);
})
publisher.publish('dogs', 'Roger')