0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

触发器和函数:让代码更接近数据

虹科网络可视化技术 2023-12-09 08:05 次阅读

一般来说,应用程序处理业务的逻辑,是将执行代码发送到数据库。因此每次执行函数时,代码都会从客户端流入服务器,结果就是这个过程十分缓慢,甚至会出现代码在应用程序之间重复执行的情况。

而我们一向是反对复杂性的!从Redis Gears到Redis7.0再到Redis7.2,我们的愿景就是为开发人员提供更灵活、高效的解决方案。

Redis Gears:四年前推出的RedisGears,是Redis平台内的第一个可编程模型,开发人员能在数据所在的地方编写并执行脚本。

Redis 7.0:Redis 7.0引入了带有函数的脚本方法,函数作为数据库的一部分,提高了可用性和持久性,继承了数据的复制和持久性级别。

Redis 7.2:Redis 7.2更进一步,引入了触发器和函数,以增强Redis的可编程性;扩展了服务器端功能;改进了数据库中执行功能的方式和时间;并促进了直接在数据所在的地方执行复杂的业务逻辑。

01

触发器和函数的基础知识

触发器和函数是通过Redis Stack提供的新一代可编程功能。它允许开发人员直接在Redis数据库中针对数据更改进行编程、存储和自动执行JavaScript代码。

1、开发人员可以定义事件(称为触发器)来执行更接近数据的函数也就是说,开发人员定义响应数据库事件或命令而执行的业务逻辑。这加快了代码和相关交互的速度,因为无需等待即可将代码从客户端引入数据库。

2、加快对Redis中其他事件的反应时间,如键空间通知,这些通知无法通过发布和订阅(Pub/Sub)事件等其他方式实时处理。

3、远程功能:触发器和函数处理集群数据库内的分布,在每个分片上安装库并根据密钥所在的位置执行函数。远程函数允许执行读取操作,这些操作可以从任何槽访问数据,甚至在集群数据库中也是如此,因此可以从每个函数访问所有数据。

02

编写语言:从Lua到JavaScript

Redis使用Lua来编写脚本和函数。Lua有很多好处,例如代码可重用性,但它并不是专业开发人员常用的语言。根据2022 年StackOverflow开发者调查,只有3.2%的开发人员在专业领域使用 Lua。

因此,在Redis7.2中引入了JavaScript,这种更流行的语言的引入,可以降低新Redis开发人员的采用成本。

03

应用程序代码更容易维护

触发器和函数的另一个好处是它降低了跨多个应用程序管理业务逻辑的复杂性

当多个应用程序访问同一数据库时,开发人员必须协调应用程序如何以一致的方式处理数据。在每个应用程序中复制代码以验证数据、丰富搜索结果,或在另一个应用程序进行更改时更新数据库也是很常见的。

有了触发器和函数,就不再需要在多个应用程序上重复代码。代码始终以相同的方式执行,按需执行或由数据库中的事件启动。

04

数据库事件实时处理

到目前为止,开发人员对Redis中的数据库事件做出反应需要依赖Pub/Sub机制。虽然 Pub/Sub有很多优点,但它并不总是正确的选择。特别是,Pub/Sub不是实时的。客户端必须主动监听事件;如果客户端没有监听,事件就会丢失。

在Redis7.2时代,开发人员可以注册基于键前缀和事件类型执行的键空间触发器。触发器可以以原子方式执行,因此在事件和业务逻辑之间不处理其他Redis事件。

05

如何操作触发器和函数

这里,我们介绍如何注册一个函数和一个触发器。当通过TFCALL命令调用函数时,函数就会被执行;触发器根据Redis中的事件执行。

1.序言定义我们使用js引擎,库名称为lib,所需的触发器和函数API的最低版本为1.0。

#!js name=lib api_version=1.0

2.接下来,我们创建一个返回Redis命令结果的函数。客户端允许在我们的函数中执行Redis 命令。数据事件包含运行函数时可以提供的键和参数

function answer(client, data) { return client.call(“ping”);}

3.Redis全局变量允许我们注册触发器和函数,并记录到日志文件中。我们为该函数注册一个名称,并在函数执行时调用它。

redis.registerFunction(‘playPingPong’, answer);

4.完整的JavaScript文件如下所示,将其另存为lib.js.

#!js name=lib api_version=1.0 function answer(client, data) { return client.call(‘ping’);} redis.registerFunction(‘playPingPong’, answer);

5.然后我们使用命令在触发器和函数中注册我们的函数TFUNCTION LOAD。该TFUNCTION LOAD命令还可以在集群数据库中分发函数库。

> redis-cli -x TFUNCTION LOAD < ./lib.jsOK

6.现在我们可以使用TFCALL命令执行该函数。该命令获取以句点分隔的库名称和函数名称。

>redis-cli TFCALL lib.playPingPong 0“PONG”

7.这样,就成功地在Redis数据库中创建、注册并触发了一个函数。

8.我们可以使用键空间触发器拓展这个示例。我们添加了一个新的注册,该注册对前缀为'fellowship:'的键做出反应。在lib.js文件末尾添加此代码。

function addLastUpdatedField(client, data) { if(data.event == ‘hset’) { var currentDateTime = Date.now(); client.call(‘hset’, data.key, ‘last_updated’, currentDateTime.toString());}} redis.registerKeySpaceTrigger(‘addLastUpdated’, 'fellowship:', addLastUpdatedField);

9. 使用带有 REPLACE 参数的 TFUNCTION LOAD 命令来更新现有库。该TFUNCTION LOAD REPLACE命令立即更新所有使用 Redis 数据库的客户端,并且它们会开始使用新的业务逻辑。

>redis-cli -x TFUNCTION LOAD REPLACE . < ./lib.jsOK

10.要测试新的键空间触发器,请创建一个以Fellowship:开头的新键,并使用RedisInsight 检查字段。键空间触发器是通过命令执行的,因此在创建键时已经添加了last_updated字段。最后,我们可以在RedisInsight中查看结果。

8f46bc16-9626-11ee-9788-92fbcf53809c.png

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据
    +关注

    关注

    8

    文章

    6876

    浏览量

    88810
  • 触发器
    +关注

    关注

    14

    文章

    1995

    浏览量

    61044
  • 函数
    +关注

    关注

    3

    文章

    4304

    浏览量

    62417
收藏 人收藏

    评论

    相关推荐

    什么是触发器 触发器的工作原理及作用

    ,并根据其差异采取对策。实际应用尽管触发器有很多优点,但是在实际的项目开发中,特别是OOP思想的深入,触发器的弊端也逐渐突显,主要:1、过多的触发器使得数据逻辑变得复杂2、数据操作比较
    发表于 12-25 17:09

    JK触发器,JK触发器是什么意思

    JK触发器,JK触发器是什么意思 1.主从JK触发器主从结构触发器也可以彻底解决直接控制,防止空翻。这里以性能优良、广泛使用的主从JK触发器
    发表于 03-08 13:36 6764次阅读

    什么是RS触发器,RS触发器的工作原理是什么?

    什么是RS触发器,RS触发器的工作原理是什么? 主从RS触发器
    发表于 03-08 14:00 3.1w次阅读

    施密特触发器,施密特触发器是什么意思

    施密特触发器,施密特触发器是什么意思 施密特触发器也有两个稳定状态,但与一般触发器不同的是,施密特触发器采用电位
    发表于 03-08 14:14 1935次阅读

    什么是边沿触发器_边沿D触发器介绍

    边沿触发器,指的是接收时钟脉冲CP 的某一约定跳变(正跳变或负跳变)来到时的输入数据。在CP=l 及CP=0 期间以及CP非约定跳变到来时,触发器不接收数据
    发表于 01-31 09:02 7.2w次阅读
    什么是边沿<b class='flag-5'>触发器</b>_边沿D<b class='flag-5'>触发器</b>介绍

    触发器的作用_触发器的特点介绍

    本文开始介绍了触发器的定义和触发器的特点,其次阐述了触发器的分类和触发器的作用,最后介绍了触发器的工作原理。
    发表于 03-27 17:35 2.2w次阅读

    触发器触发器的作用

     触发器是一种用来保障参照完整性的特殊的存储过程,它维护不同表中数据间关系的有关规则。当对指定的表进行某种特定操作(如:Insert,Delete或Update)时,触发器产生作用。触发器
    发表于 07-12 10:05 2.5w次阅读
    <b class='flag-5'>触发器</b>及<b class='flag-5'>触发器</b>的作用

    电平触发器,脉冲触发器和边沿触发器触发因素是什么

    脉冲触发器由两个相同的电平触发的SR触发器组成,其中左SR触发器成为主触发器,右手侧称为从触发器
    的头像 发表于 02-11 10:56 9210次阅读
    电平<b class='flag-5'>触发器</b>,脉冲<b class='flag-5'>触发器</b>和边沿<b class='flag-5'>触发器</b>的<b class='flag-5'>触发</b>因素是什么

    什么是触发器?触发器的作用是什么?触发器触发方式

    什么是触发器?触发器的作用是什么?触发器触发方式 触发器是一种在数据库中执行自动化操作的工具。
    的头像 发表于 08-24 15:50 8465次阅读

    触发器的输出是现态函数

    触发器的输出是现态函数 触发器是数字电路中的一种重要元件,它们通常被用于存储和装载二进制数据,也可以用于控制和同步各种数字电路。在许多数字电路应用中,
    的头像 发表于 08-24 15:50 962次阅读

    触发器激励函数和输出函数解析

    触发器激励函数和输出函数解析  触发器是数字电路中的一种重要的组合逻辑电路,其可以达到存储、延时、计数等功能。触发器有多种类型,如SR
    的头像 发表于 08-24 15:50 2745次阅读

    JK触发器与T触发器的Verilog代码实现和RTL电路实现

    JK 触发器的 Verilog 代码实现和 RTL 电路实现
    的头像 发表于 10-09 17:29 4425次阅读
    JK<b class='flag-5'>触发器</b>与T<b class='flag-5'>触发器</b>的Verilog<b class='flag-5'>代码</b>实现和RTL电路实现

    触发器的基本性质 触发器触发方式分为哪三种

    是逻辑表达式、状态改变或特定事件的发生。当这些条件满足时,触发器将被激活并执行各种动作。 触发动作:触发器在被激活后,将执行一系列特定的动作或事件。这些动作可以是触发其他程序或
    的头像 发表于 01-23 16:10 3346次阅读

    d触发器和jk触发器的区别是什么

    ,可以存储一位二进制信息。触发器的输出状态取决于输入信号和触发器的当前状态。触发器的分类主要有D触发器、JK触发器、T
    的头像 发表于 08-22 10:37 1167次阅读

    怎么用jk触发器变成t触发器

    将JK触发器变成T触发器,主要涉及到对JK触发器的输入端口进行适当的连接和配置,以实现T触发器的逻辑功能。以下是将JK触发器转换为T
    的头像 发表于 08-28 09:41 1464次阅读