跳到内容

RedisGears功能

一个RedisGears函数是对数据流中的处理步骤的正式描述。

+------------+ | 函数  | +-------------+ | +--------+ | | 输入数据+——> + |读者  | | +-------------+ | +---+----+ | | v  | | +---+----+ | | | 步骤1  | | | +---+----+ | | | | | ...| | v  | | +---+----+ | | | n步  | | | +---+----+ | | v  | +-------------+ | +---+----+ | | 结果+ <——+ |行动  | | +-------------+ | +--------+ | +------------+

总是一个函数:

  1. 始于一个读者
  2. 作用于零或更多记录
  3. 由零或多个组成操作(即步骤)
  4. 以一个行动
  5. 返回0或更多结果
  6. 可能产生零或多个错误

执行

RedisGears引擎以两种方式执行一个函数:

  • 批处理:立即执行,并且在现有数据上执行
  • 事件:执行由新的事件和它们的数据触发

函数的执行方式由它的动作决定。有两种类型的行动:

  • 运行:批量运行函数
  • 注册:注册要被事件触发的函数

当以批处理或事件的方式执行时,该函数的上下文由引擎管理。除了函数的逻辑,上下文还包括它对内部执行步骤、状态、统计、结果和遇到的任何错误的分解(以及其他内容)。

相关命令

以下RedisGears命令与执行函数相关:

执行ID

每个函数的执行都在内部分配一个唯一的值,称为执行ID

ID是由两部分组成的字符串,由连字符('-')分隔:

  1. 碎片ID:长度为40字节的标识符碎片在一个集群
  2. 序列:一个不断增加的计数器

例如:执行id

在使用时独立的模式下,Shard ID设置为0('0'),所以第一个执行ID将是:

0000000000000000000000000000000000000000 - 1

而在集群模式下,执行ID可能为:

a007297351b007297351c007297351d007297351-1

执行计划

在执行任何函数之前,引擎会生成一个执行计划.该计划由引擎执行该功能所采取的基本步骤组成。

执行并行化

在集群中运行时,执行计划由引发剂.默认情况下,执行计划将在所有分片上共享并并行执行。发起者的协调器协调分布式操作。

执行状态

执行状态描述函数的当前执行状态。状态将是以下情况之一:

  • 创建:执行已创建
  • 运行:执行正在运行
  • 完成:执行完成
  • 流产:执行已经中止
  • pending_cluster:启动器正在等待所有workers完成
  • pending_run: worker从启动器等待执行
  • pending_receive:启动器在接收到执行时,正在等待工作者的确认
  • pending_termination: worker正在等待来自启动器的终止消息

下图说明了相关的状态转换:

发起者工人  +---------------------+ 执行计划  +---------------------+ | 创建  +------------------>+ 创建  | +----------+----------+ +----------+----------+ v v  +----------+----------+ 确认  +----------+----------+ | pending_receive  +<------------------+ pending_run  | +----------+----------+ +---------------------+ v+----------+----------+ 开始执行  +---------------------+ | 运行  +------------------>+ 运行  | +----------+----------+ +----------+----------+ v v  +----------+----------+ 结果  +----------+----------+ | pending_cluster  +<------------------+ pending_termination  | +----------+----------+ +---------------------+ v  +----------+----------+终止  +---------------------+ | 完成  +------------------>+ 完成  | +---------------------+ +---------------------+

登记

事件驱动函数的表示称为注册。

注册被持久化在Redis快照(即RDB文件)中。这允许在发生故障时恢复数据和事件处理程序。

相关命令

下面的RedisGears命令与注册函数有关:

登记身份证

每个注册都有一个唯一的内部标识符,称为登记身份证.生成该ID的方式与执行ID.尽管外表相似,但不应将二者混淆。

上下文建设者

Python中的RedisGears函数总是以上下文构建器开始:GearsBuilder

提示

GB ()GearsBuilder ()

这个别名用于简洁,提高生产力,减少由于重复打字造成的手指疲劳。

Python API

GearsBuilder读者“KeysReader”defaultArg‘*’desc没有一个
参数

  • 读者:函数的读者
  • defaultArg:读者可能需要的可选参数。这些通常是键名、前缀、glob或正则表达式。它的使用取决于函数的读取器类型和操作。
  • desc:可选描述

例子

下面是如何运行默认的上下文构建器:GearsBuilder()运行()你也可以这样做:gbGB()gb注册()

行动

动作是一种特殊类型的操作,用于终止一个函数。当前支持的操作是run ()注册()

运行

运行Action将函数作为批处理作业运行。在这种情况下,函数只执行一次,一旦读取器耗尽数据就退出。

尝试在同一执行中运行多个函数将会失败并出现错误。

示例:多次执行错误

127.0.0.1:30001 > RG。PYEXECUTE"GB().run()\nGB().run()" (error) [... 'spam.error: Can not run more then 1 executions in a single script']

执行总是异步的

批处理功能总是异步执行RedisGears引擎。这意味着它们在后台线程中运行,而不是在主Redis服务器线程中运行。

Python API

GearsBuilder运行参数没有一个convertToStr真正的收集真正的

参数

  • 参数:传递给reader的可选参数defaultArg.它的意思是:
  • convertToStr:当真正的添加一个地图将记录转换为字符串的流末端操作
  • 收集:当真正的添加一个收集操作到流的末端

例子

#运行函数gbGB()gb运行()

注册

注册Action将函数注册为事件处理程序。该函数在每次事件到达时执行。每次执行时,函数都会对事件的数据进行操作,一旦操作完成,就会挂起,直到新的事件再次调用它。

Python API

GearsBuilder注册convertToStr真正的收集真正的模式“异步”onRegistered没有一个

参数

  • convertToStr:当真正的添加一个地图将记录转换为字符串的流末端操作
  • 收集:当真正的添加一个收集操作到流的末端

  • 模式:被触发函数的执行模式。可以是:

    • “异步”:在整个集群中执行是异步的
    • “async_local”:执行将是异步的,并限制在处理分片
    • “同步”:执行将是同步的和本地的
  • onRegistered:一个函数回调这在函数注册时在每个碎片上被调用。它是初始化网络连接等非序列化对象的好地方。

注意,您可以传递更多参数注册()函数,但这些参数取决于读取器。你可以在读者页面。

例子

#注册函数gbGB()gb注册()

结果

函数的执行产生零个或多个结果记录。结果由函数的最后一次操作和最后一次操作之前的所有记录组成。

结果存储在函数的执行上下文中。

相关命令

下面的RedisGears命令与获取结果相关:

Baidu