Một trong những thư viện phổ biến nhất để làm việc với máy chủ Redis từ ứng dụng Node.js là node-redis
, có tại https://github.com/NodeRedis/node-redis.
Cài đặt thư viện trong dự án của bạn:
npm install redis
Mẹo:trước tiên đừng quên chạy
npm init -y
nếu dự án là thương hiệu mới và bạn không cópackage.json
tệp đã có.
Kết nối với phiên bản Redis
Sau khi thư viện được cài đặt, hãy yêu cầu nó trong dự án của bạn bằng cách sử dụng
const redis = require('redis')
hoặc
import redis from 'redis'
Sau khi bạn có redis
đối tượng, tạo một khách hàng mới bằng cách sử dụng
const client = redis.createClient({
url: 'redis://YOUR REDIS INSTANCE URL'
})
và kết nối bằng cách sử dụng (bên trong một hàm không đồng bộ):
await client.connect()
Sau khi bạn có khách hàng, chúng tôi có thể thực hiện tất cả những điều mà chúng tôi biết rằng Redis có thể làm.
Để đóng kết nối, hãy gọi:
client.quit()
Lưu trữ và truy xuất các giá trị khóa
Lưu trữ một cặp giá trị khóa vào redis bằng cách sử dụng set()
:
client.set("<key>", "<value>")
Ví dụ:
client.set("name", "Flavio")
client.set("age", 37)
Nếu bạn chạy KEYS *
trong redis-cli
trên máy chủ Redis sạch, bạn sẽ thấy hai khóa xuất hiện:
Bạn có thể lấy giá trị được lưu trữ trong một khóa bằng cách sử dụng get()
:
const value = await client.get("name")
Xóa chuỗi khóa / giá trị bằng
client.del("names")
Làm việc với danh sách
Trong Redis, chúng tôi có thể làm việc với các danh sách bằng
-
LPUSH
-
RPUSH
-
LTRIM
-
LRANGE
các lệnh mà chúng tôi đã giới thiệu trong mô-đun Redis. Chúng ánh xạ trực tiếp dưới dạng client
các phương thức đối tượng.
Tạo danh sách bằng
client.lPush('names', 'Flavio')
Đẩy một mục mới xuống cuối danh sách:
client.rPush('names', 'Roger')
Hoặc ở đầu danh sách:
client.lPush('names', 'Syd')
Liệt kê tất cả các mục trong một danh sách bằng cách sử dụng:
const result = await client.lRange('names', 0, -1)
//result is [ 'Roger', 'Flavio', 'Syd' ]
Thả các mục khỏi danh sách bằng cách sử dụng
client.rPop('names')
Xóa danh sách bằng
client.del('names')
Làm việc với các nhóm
Trong Redis, chúng tôi làm việc với các bộ sử dụng
-
SADD
-
SPOP
-
SMEMBERS
.
và các lệnh Redis khác, ánh xạ trực tiếp dưới dạng client
các phương thức đối tượng.
Tạo nhóm bằng
client.sAdd('names', 'Flavio')
Thêm các mục khác vào bộ:
client.sAdd('names', 'Roger')
Bạn có thể thêm nhiều cái cùng một lúc:
client.sAdd('names', 'Roger', 'Syd')
cũng bằng cách chuyển một mảng:
const names = ['Flavio', 'Roger', 'Syd']
client.sAdd('names', names)
Liệt kê tất cả các mục trong một tập hợp bằng cách sử dụng:
const names = await client.sMembers('names')
Thả một mục ngẫu nhiên từ một tập hợp bằng cách sử dụng:
client.sPop('names')
Thêm thông số thứ hai để thả nhiều mục ngẫu nhiên:
client.sPop('names', 3)
Xóa một tập hợp bằng
client.del('names')
Làm việc với các hàm băm
Trong Redis, chúng tôi làm việc với các hàm băm bằng cách sử dụng một tập hợp các lệnh bao gồm
-
HMSET
-
HGETALL
-
HSET
-
HINCRBY
.
và các lệnh khác mà chúng tôi đã giới thiệu trong mô-đun Redis, ánh xạ trực tiếp dưới dạng client
các phương thức đối tượng.
Tạo hàm băm bằng cách sử dụng
client.hSet('person:1', 'name', 'Flavio', 'age', 37)
Để nhận tất cả các thuộc tính của người dùng, hãy sử dụng HGETALL:
const items = client.hGetAll('person:1')
Bạn có thể cập nhật thuộc tính băm bằng HSET:
client.hSet('person:1', 'age', 38)
Bạn có thể tăng giá trị được lưu trữ trong hàm băm bằng HINCRBY:
client.hIncrBy('person:1', 'age', 1)
Xóa một hàm băm bằng cách sử dụng
client.del('person:1')
Đăng ký
Đăng ký là một tính năng tuyệt vời của Redis, cho phép chúng tôi làm những điều thực sự thú vị trong Node.js.
Nhà xuất bản gửi thông báo trên một kênh. Nhiều người đăng ký nhận được nó.
Đăng ký kênh bằng
await subscriber.subscribe('dogs', (message) => {
console.log(message);
})
Xuất bản lên kênh bằng client.publish('<channel>', '<message>')
client.publish('dogs', 'Roger')
Xin lưu ý rằng bạn không thể xuất bản và đăng ký từ cùng một client
ví dụ.
Để làm như vậy trong cùng một ứng dụng, hãy tạo 2 ứng dụng khách:
const subscriber = redis.createClient({ ... })
const publisher = redis.createClient({ ... })
await subscriber.subscribe('dogs', (message) => {
console.log(channel, message);
})
publisher.publish('dogs', 'Roger')