学习

如何使用 Ruby 在 Redis 中查询图数据

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

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

支持将于 2025 年 1 月 31 日结束。

RedisGraph 是第一个可查询的属性图数据库,它使用稀疏矩阵表示图中的邻接矩阵,并使用线性代数查询图。RedisGraph 的一些显著特点包括:

  • 基于属性图模型
  • 可以具有属性的节点(顶点)和关系(边)
  • 可以贴标签的节点
  • 关系具有关系类型
  • 表示为稀疏邻接矩阵的图
  • Cypher 作为查询语言
  • 转换为线性代数表达式的 Cypher 查询

RedisGraph 基于一种独特的方法和架构,它将 Cypher 查询转换为在 GraphBLAS 引擎上执行的矩阵操作。这种新设计使得社交图操作、欺诈检测和实时推荐等用例的执行速度比任何其他图数据库快 10 到 600 倍。

RedisGraph Ruby 客户端#

redisgraph-rb 是一个用于 RedisGraph 模块的 Ruby gem 客户端。它依赖于 redis-rb 进行 Redis 连接管理,并支持图的 QUERY、EXPLAIN 和 DELETE 命令。

按照以下步骤开始使用 RedisGraph 和 Ruby

步骤 1. 运行 Redis Stack Docker 容器#

 docker run -p 6379:6379 --name redis/redis-stack

步骤 2. 验证 RedisGraph 模块是否已加载#

 info modules
 # Modules
 module:name=graph,ver=20405,api=1,filters=0,usedby=[],using=[],options=[]

步骤 3. 加载 RedisGraph Ruby 模块#

 gem install redisgraph
 Fetching redisgraph-2.0.3.gem
 Successfully installed redisgraph-2.0.3
 1 gem installed

步骤 4. 安装先决条件#

为确保已安装先决条件,运行以下命令:bundle install

 bundle install

步骤 5. 编写 Ruby 代码#

复制下面的示例代码并将其保存到文件 "test.rb" 中

 require 'redisgraph'

 graphname = "sample"

 r = RedisGraph.new(graphname)

 cmd = """CREATE (:person {name: 'Jim', age: 29})-[:works]->(:employer {name: 'Dunder Mifflin'})"""
 response = r.query(cmd)
 response.stats

 cmd = """MATCH ()-[:works]->(e:employer) RETURN e"""

 response = r.query(cmd)

 response.print_resultset

步骤 6. 执行 Ruby 代码#

  ruby test.rb

步骤 7. 监控图查询#

 redis-cli
 127.0.0.1:6379> monitor
 OK
 1632716792.038955 [0 172.17.0.1:57804] "info"
 1632716792.041201 [0 172.17.0.1:57804] "GRAPH.QUERY" "sample" "CREATE (:person {name: 'Jim', age: 29})-[:works]->(:employer {name: 'Dunder Mifflin'})" "--compact"
 1632716792.042751 [0 172.17.0.1:57804] "GRAPH.QUERY" "sample" "MATCH ()-[:works]->(e:employer) RETURN e" "--compact"
 1632716792.044241 [0 172.17.0.1:57804] "GRAPH.QUERY" "sample" "CALL db.propertyKeys()"
 1632716812.060458 [0 172.17.0.1:57962] "COMMAND"
 1632716813.148710 [0 172.17.0.1:57962] "GRAPH.QUERY" "sample" "CREATE (:person {name: 'Jim', age: 29})-[:works]->(:employer {name: 'Dunder Mifflin'})" "--compact"

参考#

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