基于Github上2018年6月24日更新版本
在Redis4.0版本中,引入了Redis Modules的概念.Redis4.0开放了Redis Modules API通过这个API,开发者可以自定义Redis的命令以及自定义实现功能,提供了使得可以通过外部模块对Redis进行功能拓展.Redis的模块采用动态链接库的形式,在启动的时候加载,也可以在运行时加载.
RedisGraph正是由swilly22团队基于这种特性开源实现的一种支持Cyper语言查询的、高性能、内存图数据库.
Redisgraph基于Redis Modules API拓展Redis并提供了一些新的命令和功能.主要提供的图数据的构建、查询、过滤、排序、聚合等操作.Redisgraph使用C语言编写,数据底层通过实现了一种称为Hexastore的三元组存储结构,为图搜索操作提供了高效的支持,并以数据表形式给出查询结果集.
一个Hexastore结构由一组的三元组列表构成,三元组的结构:
主语(Subject) -[谓语(Predicate)] -> 目标(Object)Hexastore在存储三元组时会将SPO的进行排列组合为六种三元组进行存储到内存中,以提供高效快速的搜索.
两种加载方式:
在redis.conf 文件中添加loadmodule /path/module/src/redisgraph.so,启动Redis.使用redis-server --loadmodule /path/module/src/redisgraph.so 命令启动Redis.启动redis后,若加载成功RedisGraph模块,则会显示如下日志:
功能:针对指定的图执行给定的查询
参数:key-- 图名称、options–查询语句
返回值: 数据表结果集
例: 根据节点和关系查询数据集
GRAPH.QUERY recruitMsg "match (com:Company)-[:have]->(pos:Position)"查询’公司拥有职位’关系图中的职位名称、职位最低薪资、职位最高薪资.
GRAPH.QUERY COM 'MATCH (com:company)-[:have]->(pos:position)RETURN pos.positionName,pos.positionPriceLower,pos.positionPriceTop'RedisGraph现阶段还处于开发阶段,还有很多功能未来得及实现且社区还不够完善,但基本增删改查以满足传统业务需求。
总体来说RedisGraph提供了一些基础的图数据库的基本操作,适用于构建简单的关系图.开发者能够通过提供的API构建、查询关系图,也得益于其基于内存存储和Hexastore数据结构的特性,使得查询效率较其他图数据库有明显的优势.但还存在着如上文提到的很多的局限性,但是redisgraph的出现解决了Redis传统的五种数据结构,极大扩展了Redis的热数据存储功能,通过它我们可以将MySQL的热点数据直接以表的形式存储到redis,这极大的提高了服务器响应速度,这样我们的api可直接获取redisgraph中的表数据。
python 客户端
查询文档示例
pip install redisgraph
github