RedisGears功能¶
一个RedisGears函数是对数据流中的处理步骤的正式描述。
+------------+ | 函数 | +-------------+ | +--------+ | | 输入数据+——> + |读者 | | +-------------+ | +---+----+ | | v | | +---+----+ | | | 步骤1 | | | +---+----+ | | | | | ...| | v | | +---+----+ | | | n步 | | | +---+----+ | | v | +-------------+ | +---+----+ | | 结果+ <——+ |行动 | | +-------------+ | +--------+ | +------------+
总是一个函数:
执行¶
RedisGears引擎以两种方式执行一个函数:
- 批处理:立即执行,并且在现有数据上执行
- 事件:执行由新的事件和它们的数据触发
函数的执行方式由它的动作决定。有两种类型的行动:
当以批处理或事件的方式执行时,该函数的上下文由引擎管理。除了函数的逻辑,上下文还包括它对内部执行步骤、状态、统计、结果和遇到的任何错误的分解(以及其他内容)。
执行ID¶
每个函数的执行都在内部分配一个唯一的值,称为执行ID.
ID是由两部分组成的字符串,由连字符('-')分隔:
例如:执行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文件)中。这允许在发生故障时恢复数据和事件处理程序。
登记身份证¶
每个注册都有一个唯一的内部标识符,称为登记身份证.生成该ID的方式与执行ID.尽管外表相似,但不应将二者混淆。
上下文建设者¶
Python中的RedisGears函数总是以上下文构建器开始:类GearsBuilder
.
提示
GB ()
是GearsBuilder ()
.
这个别名用于简洁,提高生产力,减少由于重复打字造成的手指疲劳。
Python API
类GearsBuilder(读者=“KeysReader”,defaultArg=‘*’,desc=没有一个)
- 读者:函数的读者
- defaultArg:读者可能需要的可选参数。这些通常是键名、前缀、glob或正则表达式。它的使用取决于函数的读取器类型和操作。
- desc:可选描述
例子
下面是如何运行默认的上下文构建器:GearsBuilder().运行()你也可以这样做:gb=GB()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.它的意思是:
- 一个球形的模式KeysReader和KeysOnlyReader读者
- 的键名StreamReader读者
- 的Python生成器PythonReader读者
- convertToStr:当
真正的
添加一个地图将记录转换为字符串的流末端操作 - 收集:当
真正的
添加一个收集操作到流的末端
例子
#运行函数gb=GB()gb.运行()
注册¶
的注册Action将函数注册为事件处理程序。该函数在每次事件到达时执行。每次执行时,函数都会对事件的数据进行操作,一旦操作完成,就会挂起,直到新的事件再次调用它。
Python API
类GearsBuilder.注册(convertToStr=真正的,收集=真正的,模式=“异步”,onRegistered=没有一个)
参数
- convertToStr:当
真正的
添加一个地图将记录转换为字符串的流末端操作 收集:当
真正的
添加一个收集操作到流的末端模式:被触发函数的执行模式。可以是:
- “异步”:在整个集群中执行是异步的
- “async_local”:执行将是异步的,并限制在处理分片
- “同步”:执行将是同步的和本地的
- onRegistered:一个函数回调这在函数注册时在每个碎片上被调用。它是初始化网络连接等非序列化对象的好地方。
注意,您可以传递更多参数注册()
函数,但这些参数取决于读取器。你可以在读者页面。
例子
#注册函数gb=GB()gb.注册()
结果¶
函数的执行产生零个或多个结果记录。结果由函数的最后一次操作和最后一次操作之前的所有记录组成。
结果存储在函数的执行上下文中。