学习

使用 Redis Stack 的图数据库

Ajeet Raina
作者
Ajeet Raina, Redis 前开发者增长经理
生命周期结束通知

Redis 正在逐步淘汰 RedisGraph这篇文章 解释了此决定的原因以及对现有 Redis 客户和社区成员的影响。

支持结束时间定为 2025 年 1 月 31 日。

从 Redis Stack 7.2.x-y 开始,Redis Stack 将不再包含图形功能(RedisGraph)。

RedisGraph 是一个 Redis 模块,它使企业能够比使用传统关系数据库或现有图形数据库更快地处理任何类型的连接数据。RedisGraph 实现了独特的數據存储和处理解决方案(使用稀疏邻接矩阵和 GraphBLAS),以提供最快速、最高效的方式存储、管理和处理图形中的连接数据。使用 RedisGraph,您可以在使用比其他图形数据库少 50%-60% 的内存资源的同时,比传统图形解决方案快 10-600 倍地处理复杂事务!

步骤 1. 创建一个免费的云帐户#

创建您的免费 Redis Cloud 帐户。单击“开始”后,您将收到一封包含激活帐户链接的电子邮件,以完成注册流程。

提示

在有限时间内,使用 TIGER200 获得 $200 的 Redis Cloud 积分,试用所有高级功能!

🎉 点击此处注册

步骤 2. 创建您的数据库#

选择您首选的云供应商。选择区域,然后单击“开始免费使用”以自动创建您的免费数据库。

提示

如果您想使用您喜欢的名称和 Redis 类型创建自定义数据库,请单击图像中显示的“创建自定义数据库”选项。

步骤 3. 验证数据库详细信息#

您将获得公用端点 URL 和“Redis Stack”作为数据库类型,以及默认情况下包含的模块列表。

步骤 4. 安装 RedisInsight#

RedisInsight 是一款可视化工具,可让您对 Redis 数据库进行 GUI 和 CLI 两种交互,以及在开发基于 Redis 的应用程序时更多功能。它是一个功能齐全的纯桌面 GUI 客户端,提供设计、开发和优化 Redis 应用程序的功能。它适用于任何云提供商,只要您在具有网络访问权限的主机上运行它到您的基于云的 Redis 服务器即可。它可以轻松发现云数据库,并通过单击即可配置连接详细信息。它允许您自动添加 Redis Enterprise 软件和 Redis Cloud 数据库。

您可以在本地系统上安装 Redis Stack 以使 RedisInsight GUI 工具正常运行。确保您的 Mac 系统中安装了 brew 软件包。

 brew tap redis-stack/redis-stack
 brew install --cask redis-stack
  ==> Installing Cask redis-stack-redisinsight
  ==> Moving App 'RedisInsight-preview.app' to '/Applications/RedisInsight-preview.app'
  🍺  redis-stack-redisinsight was successfully installed!
  ==> Installing Cask redis-stack
  🍺  redis-stack was successfully installed!

转到应用程序并单击“RedisInsight-v2”以显示 Redis 桌面 GUI 工具。

步骤 5. 添加 Redis 数据库#

步骤 6. 输入 Redis Cloud 详细信息#

添加 Redis Cloud 数据库端点、端口和密码。

步骤 7. 在 RedisInsight 仪表板中验证数据库#

步骤 8. RedisGraph 入门#

在以下步骤中,我们将使用一些基本的 RediGraph 命令将数据插入图形,然后查询图形。您可以从 Redis 命令行界面 (redis-cli) 运行它们,也可以使用 RedisInsight 中提供的 CLI。(查看本教程的第 2 部分以了解有关使用 RedisInsight CLI 的更多信息。)

步骤 9:将数据插入图形#

插入演员#

要与 RedisGraph 交互,您通常会使用 GRAPH.QUERY 命令并执行 Cypher 查询。让我们开始将一些演员插入图形:电影图形名称,该名称是使用此命令自动创建的

>> GRAPH.QUERY graph:movies "CREATE (:Actor {name:'Mark Hamill', actor_id:1}), (:Actor {name:'Harrison Ford', actor_id:2}), (:Actor {name:'Carrie Fisher', actor_id:3})"

1) 1) "Labels added: 1"
   2) "Nodes created: 3"
   3) "Properties set: 6"
   4) "Query internal execution time: 0.675400 milliseconds"

此单个查询创建了三个演员,以及他们的姓名和唯一 ID。

插入电影#

> GRAPH.QUERY graph:movies "CREATE (:Movie {title:'Star Wars: Episode V - The Empire Strikes Back', release_year: 1980 , movie_id:1})"
1) 1) "Labels added: 1"
   2) "Nodes created: 1"
   3) "Properties set: 3"
   4) "Query internal execution time: 0.392300 milliseconds"

此单个查询创建了一部电影,包含标题、发行年份和 ID。

关联演员和电影#

图形的核心是节点之间的关系,使应用程序能够导航和查询它们。让我们在演员和电影之间建立关系

> GRAPH.QUERY graph:movies "MATCH (a:Actor),(m:Movie) WHERE a.actor_id = 1 AND m.movie_id = 1 CREATE (a)-[r:Acted_in {role:'Luke Skywalker'}]->(m) RETURN r"
1) 1) "r"
2) 1) 1) 1) 1) "id"
            2) (integer) 1
         2) 1) "type"
            2) "Acted_in"
         3) 1) "src_node"
            2) (integer) 0
         4) 1) "dest_node"
            2) (integer) 3
         5) 1) "properties"
            2) 1) 1) "role"
                  2) "Luke Skywalker"
3) 1) "Properties set: 1"
   2) "Relationships created: 1"
   3) "Query internal execution time: 0.664800 milliseconds"

此命令创建了一个新的关系,表明演员马克·哈米尔在星球大战:帝国反击战中饰演卢克·天行者。

让我们对其他演员重复此过程

> GRAPH.QUERY graph:movies "MATCH (a:Actor), (m:Movie) WHERE a.actor_id = 2 AND m.movie_id = 1 CREATE (a)-[r:Acted_in {role:'Han Solo'}]->(m) RETURN r"
> GRAPH.QUERY graph:movies "MATCH (a:Actor), (m:Movie) WHERE a.actor_id = 3 AND m.movie_id = 1 CREATE (a)-[r:Acted_in {role:'Princess Leila'}]->(m) RETURN r"

您也可以在一个查询中完成所有这些操作,例如

> GRAPH.QUERY graph:movies "CREATE (:Actor {name:'Marlo Brando', actor_id:4})-[:Acted_in {role:'Don Vito Corleone'}]->(:Movie {title:'The Godfather', release_year: 1972 , movie_id:2})"

1) 1) "Nodes created: 2"
   2) "Properties set: 6"
   3) "Relationships created: 1"
   4) "Query internal execution time: 0.848500 milliseconds"

查询图形#

现在您已经在图形中有了数据,您就可以开始提出一些问题,例如

“所有电影的标题是什么?”#

> GRAPH.QUERY graph:movies "MATCH (m:Movie) RETURN m.title"

1) 1) "m.title"
2) 1) 1) "Star Wars: Episode V - The Empire Strikes Back"
   2) 1) "The Godfather"
3) 1) "Query internal execution time: 0.349400 milliseconds"

“ID 为 1 的电影的信息是什么?”#

> GRAPH.QUERY graph:movies "MATCH (m:Movie) WHERE m.movie_id = 1 RETURN m"

1) 1) "m"
2) 1) 1) 1) 1) "id"
            2) (integer) 3
         2) 1) "labels"
            2) 1) "Movie"
         3) 1) "properties"
            2) 1) 1) "title"
                  2) "Star Wars: Episode V - The Empire Strikes Back"
               2) 1) "release_year"
                  2) (integer) 1980
               3) 1) "movie_id"
                  2) (integer) 1
3) 1) "Query internal execution time: 0.365800 milliseconds"

“星球大战:帝国反击战中的演员有哪些?他们扮演了什么角色?”#

> GRAPH.QUERY graph:movies "MATCH (a:Actor)-[r:Acted_in]-(m:Movie) WHERE m.movie_id = 1 RETURN a.name,m.title,r.role"
1) 1) "a.name"
   2) "m.title"
   3) "r.role"
2) 1) 1) "Mark Hamill"
      2) "Star Wars: Episode V - The Empire Strikes Back"
      3) "Luke Skywalker"
   2) 1) "Harrison Ford"
      2) "Star Wars: Episode V - The Empire Strikes Back"
      3) "Han Solo"
   3) 1) "Carrie Fisher"
      2) "Star Wars: Episode V - The Empire Strikes Back"
      3) "Princess Leila"
3) 1) "Query internal execution time: 0.641200 milliseconds"

使用 RedisInsight 可视化图形数据库#

如果您使用的是 RedisInsight,您可以以图形方式可视化并导航到节点和关系。单击左侧的 RedisGraph 菜单项,然后输入查询

MATCH (m:Actor) return m

单击“执行”按钮,双击演员以跟踪关系。您应该会看到一个类似于此的图形

资源#

下一步#

  • 在 快速入门 教程中了解有关 RedisGraph 的更多信息。