如何从Node.js使用Redis(附实例)

3,661 阅读3分钟

从Node.js应用程序与Redis服务器合作的最流行的库之一是node-redis ,可在github.com/NodeRedis/n…

在你的项目中安装该库。

npm install redis

提示:如果项目是全新的,而且你还没有package.json 文件,别忘了先运行npm init -y

连接到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()

存储和检索键值

使用set() ,将一个键值对存储到Redis。

client.set("<key>", "<value>")

例子。

client.set("name", "Flavio")
client.set("age", 37)

如果你在一个干净的Redis服务器上运行KEYS *redis-cli ,你会看到出现了两个键。

你可以使用get() 获得存储在键中的值。

const value = await client.get("name")

使用以下方法删除一个键/值字符串

client.del("names")

使用列表工作

在 Redis 中,我们可以使用 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 实例中发布和订阅。

要在同一个应用程序中这样做,需要创建两个客户端。

const subscriber = redis.createClient({ ... })
const publisher = redis.createClient({ ... })

await subscriber.subscribe('dogs', (message) => {
  console.log(channel, message);
})

publisher.publish('dogs', 'Roger')