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

news2024/11/24 16:28:51

来源:艾特保IT 虹科干货丨触发器和函数:让代码更接近数据

原文链接:虹科干货 | 触发器和函数:让代码更接近数据

欢迎关注虹科,为您提供最新资讯!

文章速览:

触发器和函数的基础知识

编写语言:从Lua到JavaScript

轻松维护应用程序代码

数据库事件实时处理

如何操作触发器和函数

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

而我们一向是反对复杂性的!从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。

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

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

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

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

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

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1306702.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023_Spark_实验二十六:编写Shell模拟生成点击实时数据

引言:流式数据处理主要处理实时数据,由于实验教学过程中,每个同学无法拿到实时数据,因此我们开发shell脚本模拟实时数据生成,支持后续实验。 实验目的:通过开发模拟实时点击流shell脚本,模拟实时…

文本用二维码展示如何制作?支持插入图片或其他内容

将文本内容存入二维码中扫码查看,方便信息的快速传播,让其他人扫码就可以获取内容。那么想要把文本内容生成二维码,一般的制作方法可以利用二维码生成器来制作,操作的步骤也非常的简单,只需要用简单的几个步骤就可以快…

圣诞节酷炫特效合集【含十几个HTML+CSS前端特效+34个桌面酷炫圣诞程序】

写在前面 ❤️源码获取:订阅后见文末 ❤️内容介绍:包含HTML+CSS等十几个圣诞特效;以及三十四个桌面酷炫圣诞树合集 ❤️订阅后所得如下: ❤️HTML圣诞+桌面圣诞程序效果如下: 下方展示代码仅举例其中几个 所有效果源码及文件订阅后找博主获取即可 🎄css3圣诞雪人动…

Python爬虫实战 | 爬取拼多多商品的详情价格SKU数据

本案例将为大家演示如何爬取拼多多商品的详情数据。目的是爬取大量的商品以及商品的评论,所以在程序设计上要考虑到该爬虫的高并发以及持久化存储。爬虫工具选用了Scrapy框架,以满足爬虫的高并发请求任务;持久化存储用了MongoDB,对…

Feign-自定义配置

一、自定义Feign配置 二、修改日志级别 配置Feign日志有两种方式 方式一:application配置文件方式 (1)全局生效 feign: client: config: default: #这里用default就是全局配置,…

Quartus II + Modelsim 脚本仿真

软件版本:Intel Quartus Prime Design Suite: 23.2 方式参考附件Intel 官方文档:Questa*-Intel FPGA Edition Quick-Start: Intel Quartus Prime Pro Edition 第1步,创建一个ram ip,并形成一个例化的top层ip 第2步,自…

nestjs守卫校验jwt

目标 部分接口需要用户登录后才可以访问,用户登录后可以颁发 jwt_token 给前端,前端在调用需要鉴权的接口,需要在请求头添加 jwt_token,后端校验通过才能继续访问,否则返回403无权访问 创建守卫 anth 安装依赖 npm…

linux串口数据丢失--中断绑定CPU优化

问题现象 机器在户外测试时, 出现 轮速记 丢失的现象 小概率出现 50Hz丢失1~2帧极低概率出现 0.1~0.3秒内没有底盘数据 此问题导致slam定位漂, 需要优化处理. 验证与测试 问题1: 底盘串口 一个数据帧(head–data–crc) 被分片2~3报文 解决方法: 检测到head之后, 解析data…

2023全国大学生数据分析大赛A题完整论文教学

大家好呀,从发布赛题一直到现在,总算完成了全国大学生数据分析大赛A题某电商平台用户行为分析与挖掘完整的成品论文。 本论文可以保证原创,保证高质量。绝不是随便引用一大堆模型和代码复制粘贴进来完全没有应用糊弄人的垃圾半成品论文。 实…

bugku -- 网站被黑--本地管理员

dirsearch 或者御剑扫目录 扫出来有个登录页面 然后bp抓包爆破密码 扫出来密码是heck登录就行了 构造x-forwarded-for:127.0.0.1 本地登录: 爆破账号 密码是text123 下面的base64解码可以知道

《地理信息系统原理》笔记/期末复习资料(11. GIS的输出与地图可视化)

目录 11. GIS的输出与地图可视化 11.1. GIS的输出 11.1.1. 输出方式 11.1.2. GIS的图形输出设备 11.2. 地图符号 11.2.1. 地图符号的实质 11.2.2. 地图符号的分类 11.2.3. 地图符号的设计要求 11.3. 专题信息表达 11.3.1. 专题地图的基本概念 11.3.2. 专题地图的表示…

漏洞补丁存在性检测技术洞察

1、 漏洞补丁存在性检测技术是什么? 漏洞补丁存在性检测技术通俗的理解就是检测目标对象中是否包含修复特定已知漏洞的补丁代码,目标检测对象可能是源码,也能是二进制文件。 2、 漏洞补丁存在性检测技术业务背景 补丁检测这个问题背景是产品…

SSL证书验证域名所有权

SSL证书申请时需要进行验证,这是因为SSL证书的主要目的是为了确保网络通信的安全性和数据的完整性。通过验证,证书颁发机构(CA)可以确认申请者对特定域名或资源的所有权,并确保他们有权使用该证书来加密和保护用户与网…

vue3 实现日期格式化

vue3 实现日期格式化 在标签内添加 value-format"YYYY-MM-DD" <el-form-item label"注册时间:"><el-date-picker v-model"tableForm.date" type"date" value-format"YYYY-MM-DD" placeholder"选择注册时间&…

探究Spring Boot 中实现跨域的几种方式

文章目录 前言1. 使用CrossOrigin注解2. 使用WebMvcConfigurer配置3. 使用Filter配置4. 使用全局配置结束语 前言 在现代Web应用中&#xff0c;由于安全性和隐私的考虑&#xff0c;浏览器限制了从一个域向另一个域发起的跨域HTTP请求。解决这个问题的一种常见方式是实现跨域资…

MyBatis框架知识点①

MyBatis 1.MyBatis的特点2.搭建MyBatis项目依赖文件配置编写MyBatis中全局配置文件数据库SQL编写实体类编写映射文件加载映射文件log4j配置编写测试程序 3.增删改查的基本操作查询操作新增操作修改删除操作 4. Mapper代理方式Mybatis 工具类实体类Mapper接口mapper文件加载mapp…

一览科技创始人罗江春:AI涌现,文娱迎来黄金十年

编者荐语&#xff1a; 一览科技创始人兼CEO罗江春先生在11月28日的极新AIGC峰会上发表了以“AI涌现&#xff0c;文娱迎来黄金十年”为题的演讲&#xff0c;关于AIGC对文娱行业的加持以及AI创业公司的方向和基本点&#xff0c;罗江春先生给出了未来的方向。 以下文章来源于一览…

广度(宽度)优先搜素——层层递进

分析算法及题目 完整代码实现 广度优先搜索&#xff08;Breadth-First Search&#xff0c;BFS&#xff09;是一种图和树的遍历算法&#xff0c;与深度优先搜索相对应。BFS从起始节点开始&#xff0c;首先访问起始节点&#xff0c;然后逐层地访问其邻居节点&#xff0c;直到达到…

OpenHarmony应用开发——在标准OpenHarmony上运行应用-标准OpenHarmony工程设置

一、前言 前面我们创建了一个工程并使其在HarmonyOS系统上运行&#xff0c;本文我们来阐述一下如何在标准的OpenHarmony开发板或系统上运行。 二、详细步骤 1.下载并配置OpenHarmony SDK 首先&#xff0c;打开Settings. 将SDK选择为OpenHarmony&#xff0c;第一次选择路径应该…

想要更稳定的数据传输?试试这些Aspera替代方案

在现代数字化时代&#xff0c;数据传输变得越来越重要。由于数据文件的规模、数量和复杂性的增加&#xff0c;以及对数据安全和机密性的需求不断提高&#xff0c;传统的FTP、SCP和HTTP等协议已无法满足现代数据传输的需求。因此&#xff0c;许多组织和企业转向使用Aspera协议进…