Graph 快速入门

Graph 快速入门

前提条件

对于本快速入门教程,您需要

使用 redis-cli 处理 Graph

首先,使用 redis-cli 连接到您的数据库

创建 Graph

创建 Graph 时,您可以使用以下格式定义节点及其关系

(:<节点 1>)-[:<关系>]->(:<节点 2>)

要在单个创建查询中定义多个节点和关系,请使用逗号分隔条目。

例如,使用 CREATE 查询来创建一个新的 Graph,其中包含参加 MotoGP 联赛的摩托车手和车队

127.0.0.1:12543> GRAPH.QUERY MotoGP "CREATE (:Rider {name:'Valentino Rossi'})-[:rides]->(:Team {name:'Yamaha'}), (:Rider {name:'Dani Pedrosa'})-[:rides]->(:Team {name:'Honda'}), (:Rider {name:'Andrea Dovizioso'})-[:rides]->(:Team {name:'Ducati'})"
1) 1) "Labels added: 2"
   2) "Nodes created: 6"
   3) "Properties set: 6"
   4) "Relationships created: 3"
   5) "Cached execution: 0"
   6) "Query internal execution time: 0.385472 milliseconds"

添加节点

您可以将新节点添加到先前创建的 Graph

127.0.0.1:12543> GRAPH.QUERY MotoGP "CREATE (:Rider {name:'Jorge Lorenzo'})"
1) 1) "Nodes created: 1"
   2) "Properties set: 1"
   3) "Cached execution: 0"
   4) "Query internal execution time: 0.185841 milliseconds"

添加关系

要在 Graph 的节点之间创建新关系

127.0.0.1:12543> GRAPH.QUERY MotoGP "MATCH (r:Rider), (t:Team) WHERE r.name = 'Jorge Lorenzo' and t.name = 'Honda' CREATE (r)-[:rides]->(t)"
1) 1) "Relationships created: 1"
   2) "Cached execution: 0"
   3) "Query internal execution time: 0.356578 milliseconds"

查询 Graph

创建 Graph 后,您可以使用 GRAPH.QUERY 命令查询 Graph 的数据。

以下示例返回哪些摩托车手为 Yamaha 车队效力

127.0.0.1:12543> GRAPH.QUERY MotoGP "MATCH (r:Rider)-[:rides]->(t:Team) WHERE t.name = 'Yamaha' RETURN r,t"
1) 1) "r"
   2) "t"
2) 1) 1) 1) 1) "id"
            2) "0"
         2) 1) "labels"
            2) 1) "Rider"
         3) 1) "properties"
            2) 1) 1) "name"
                  2) "Valentino Rossi"
      2) 1) 1) "id"
            2) "1"
         2) 1) "labels"
            2) 1) "Team"
         3) 1) "properties"
            2) 1) 1) "name"
                  2) "Yamaha"
3) 1) "Cached execution: 0"
   2) "Query internal execution time: 0.500535 milliseconds"

您还可以使用 函数创建更复杂的查询。

例如,您可以使用 count 函数检查有多少车手代表 Honda 车队

127.0.0.1:12543> GRAPH.QUERY MotoGP "MATCH (r:Rider)-[:rides]->(t:Team {name:'Honda'}) RETURN count(r)"
1) 1) "count(r)"
2) 1) 1) "2"
3) 1) "Cached execution: 0"
   2) "Query internal execution time: 0.445760 milliseconds"

删除节点

您可以使用 DELETE 查询从 Graph 中删除特定节点及其关系

127.0.0.1:12543> GRAPH.QUERY MotoGP "MATCH (r:Rider {name: 'Dani Pedrosa'}) DELETE r"
1) 1) "Nodes deleted: 1"
   2) "Relationships deleted: 1"
   3) "Cached execution: 0"
   4) "Query internal execution time: 0.276815 milliseconds"

删除关系

您还可以使用 DELETE 查询删除节点的关​​系,而不删除任何节点

127.0.0.1:12543> GRAPH.QUERY MotoGP "MATCH (:Rider {name: 'Valentino Rossi'})-[r:rides]->() DELETE r"
1) 1) "Relationships deleted: 1"
   2) "Cached execution: 0"
   3) "Query internal execution time: 0.348346 milliseconds"

删除 Graph

要删除整个 Graph,包括所有节点和关系,请运行 GRAPH.DELETE 命令

127.0.0.1:12543> GRAPH.DELETE MotoGP
"Graph removed, internal execution time: 0.013138 milliseconds"

使用 Python 处理 Graph

如果要在应用程序中使用 Graph,可以使用以下 客户端库之一。

以下示例使用 Redis Python 客户端库 redis-py,该库自 v4.1.0 起支持 Graph 命令。

这段 Python 代码创建了一个 Graph,表示社交媒体网站上用户之间的友谊。它还展示了如何运行查询和更改用户之间的关系。

import redis
from redis.commands.graph.edge import Edge
from redis.commands.graph.node import Node

# Connect to a database
r = redis.Redis(host="<endpoint>", port="<port>", 
                password="<password>")

# Create nodes that represent users
users = { "Alex": Node(label="Person", properties={"name": "Alex", "age": 35}),
          "Jun": Node(label="Person", properties={"name": "Jun", "age": 33}),
          "Taylor": Node(label="Person", properties={"name": "Taylor", "age": 28}),
          "Noor": Node(label="Person", properties={"name": "Noor", "age": 41}) }

# Define a graph called SocialMedia
social_graph = r.graph("SocialMedia")

# Add users to the graph as nodes
for key in users.keys():
    social_graph.add_node(users[key])

# Add relationships between user nodes
social_graph.add_edge( Edge(users["Alex"], "friends", users["Jun"]) )
# Make the relationship bidirectional
social_graph.add_edge( Edge(users["Jun"], "friends", users["Alex"]) )

social_graph.add_edge( Edge(users["Jun"], "friends", users["Taylor"]) )
social_graph.add_edge( Edge(users["Taylor"], "friends", users["Jun"]) )

social_graph.add_edge( Edge(users["Jun"], "friends", users["Noor"]) )
social_graph.add_edge( Edge(users["Noor"], "friends", users["Jun"]) )

social_graph.add_edge( Edge(users["Alex"], "friends", users["Noor"]) )
social_graph.add_edge( Edge(users["Noor"], "friends", users["Alex"]) )

# Create the graph in the database
social_graph.commit()

# Query the graph to find out how many friends Alex has
result1 = social_graph.query("MATCH (p1:Person {name: 'Alex'})-[:friends]->(p2:Person) RETURN count(p2)")
print("Alex's original friend count:", result1.result_set)

# Delete a relationship without deleting any user nodes
social_graph.query("MATCH (:Person {name: 'Alex'})<-[f:friends]->(:Person {name: 'Jun'}) DELETE f")

# Query the graph again to see Alex's updated friend count
result2 = social_graph.query("MATCH (p1:Person {name: 'Alex'})-[:friends]->(p2:Person) RETURN count(p2)")
print("Alex's updated friend count:", result2.result_set)

# Delete the entire graph
social_graph.delete()

示例输出

$ ./quick_start.py
Alex's original friend count: [[2]]
Alex's updated friend count: [[1]]

使用 Redis Insight 可视化 Graph

您可以使用 Redis Insight 工作台来可视化 Graph 节点之间的关系。

  1. 使用 Redis Insight 连接到您的数据库。您可以手动连接或使用自动发现功能。

  2. 选择 工作台 按钮

    The Workbench icon
  3. 在文本编辑器中输入 Graph 查询。

    例如,此查询返回 Graph 中的所有节点和关系

    GRAPH.QUERY MotoGP "MATCH (n) RETURN n"
    
  4. 选择 运行

    The Run command icon

运行查询后,输出日志会显示 Graph 的节点和关系的可视化表示

Visualize a graph with Redis Insight workbench.

更多信息

评价此页面
返回顶部 ↑