学习

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

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 命令的支持。

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

步骤 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 的更多信息。