学习

使用 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,您可以比传统图解决方案处理复杂事务的速度快 10 到 600 倍,同时比其他图数据库使用的内存资源减少 50% 到 60%!

步骤 1. 创建免费 Cloud 账户#

创建您的免费 Redis Cloud 账户。点击“开始使用”后,您将收到一封包含激活账户并完成注册过程链接的电子邮件。

提示

限时优惠,使用 TIGER200 可获得 $200 Redis Cloud 积分,并尝试所有高级功能!

🎉 点击此处注册

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

选择您偏好的云供应商。选择区域,然后点击“开始免费使用”即可自动创建您的免费数据库。

提示

如果您想创建具有自定义名称和 Redis 类型的数据库,请点击图片中显示的“创建自定义数据库”选项。

步骤 3. 验证数据库详情#

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

步骤 4. 安装 RedisInsight#

RedisInsight 是一个可视化工具,可让您通过 GUI 和 CLI 与您的 Redis 数据库进行交互,并在开发基于 Redis 的应用程序时提供更多功能。它是一个功能齐全的纯桌面 GUI 客户端,提供设计、开发和优化 Redis 应用程序的功能。它适用于任何云提供商,只要您在能够访问云端 Redis 服务器的主机上运行它即可。它使发现云数据库并一键配置连接详情变得容易。它允许您自动添加 Redis Enterprise Software 和 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 快速入门#

在以下步骤中,我们将使用一些基本的 RedisGraph 命令将数据插入到图中,然后查询该图。您可以从 Redis 命令行界面 (redis-cli) 运行这些命令,或使用 RedisInsight 中可用的 CLI。(请参阅本教程的第 2 部分,了解更多关于使用 RedisInsight CLI 的信息。)

步骤 9: 将数据插入到图中#

插入演员#

要与 RedisGraph 交互,通常会使用 GRAPH.QUERY 命令并执行 Cypher 查询。让我们开始将一些演员插入到图名称 graph:movies 中,此图名称将通过此命令自动创建

>> 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"

此命令创建了一个新的关系,表明演员 Mark Hamill 在《星球大战:第五集 - 帝国反击战》中饰演 Luke Skywalker。

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

> 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 的信息。